这是最好的方式我能想出来转换一个MySQL GUID/usb驱所产生的usb驱()以二进制(16):

UNHEX(REPLACE(UUID(),'-',''))

然后将其存储在一个二元的(16)

是否有任何影响的这样做,我应该知道的?

有帮助吗?

解决方案

没有多少影响。它将查询慢一点,但你几乎察觉不到。

UNIQUEIDENTIFIER被存储作为内部16-byte binary反正。

如果你要二进制加载到客户端,并解析它那里,请注意bit order,其可具有比初始NEWID()其他字符串表示。

OracleSYS_GUID()功能是容易出现这种问题,将其转换成字符串给出客户端和服务器上不同的结果。

其他提示

从MySQL8.0及以上你可以用 UUID_TO_BIN:

UUID_TO_BIN(string_uuid),UUID_TO_BIN(string_uuid,swap_flag)

转换成一串usb驱二进制usb驱和返回的结果。(该IS_UUID()function说明列出了允许串usb驱格式。) 返回的二进制东VARBINARY(16)价值。

CREATE TABLE t (id binary(16) PRIMARY KEY);

INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

SELECT *, BIN_TO_UUID(id) FROM t;

DB-Fiddle.com 演示

我将散列成一个8字节的整数,并且使用低碰撞的高效率的单向散列算法等MurmurHash64A存储整数。这样可节约大量空间,可以被索引和/或分区上。有一个SourceForge项目,其中包括为MySQL memcached的功能(的http://锻造。 mysql.com/projects/project.php?id=250 ),其中可能包括MurmurHash64A,因为Memchached使用它,但我不知道。或者看看这个实现FNV的MySQL的:的 http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top