题
这是最好的方式我能想出来转换一个MySQL GUID/usb驱所产生的usb驱()以二进制(16):
UNHEX(REPLACE(UUID(),'-',''))
然后将其存储在一个二元的(16)
是否有任何影响的这样做,我应该知道的?
解决方案
没有多少影响。它将查询慢一点,但你几乎察觉不到。
UNIQUEIDENTIFIER
被存储作为内部16-byte binary
反正。
如果你要二进制加载到客户端,并解析它那里,请注意bit order
,其可具有比初始NEWID()
其他字符串表示。
Oracle
的SYS_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;
我将散列成一个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/