在MySQL中存储UUID v4
我使用PHP生成UUID,根据这里找到的函数:https://stackoverflow.com/a/15875555/339440
现在我想将它存储在MySQL数据库中。 什么是用于存储UUID v4的最佳/最有效的MySQL字段格式?
我目前有varchar(256),但我敢肯定,这比必要的大得多。 我发现了很多答案,但他们通常对他们所指的UUID的形式不明确,所以我要求提供具体的格式。
将它作为VARCHAR(36)
存储,如果你希望有一个确切的拟合,或者VARCHAR(255)
,它将用相同的存储成本解决。 没有理由在这里大惊小怪。
记住VARCHAR
字段是可变长度的,所以存储成本与其中的实际数据量成正比,而不是其中的数据量。
将其存储为BINARY
非常烦人,值不可打印,并且在运行查询时可能显示为垃圾。 很少有理由使用文字二进制表示法。 人类可读的值可以被复制粘贴,并易于使用。
其他一些平台,比如Postgres,有一个适当的UUID列,它以更紧凑的格式将其内部存储,但将其显示为人类可读的,因此您可以充分利用这两种方法。
如果每行都有一个UUID,则可以将其存储为CHAR(36)
并在VARCHAR(36)
每行保存1个字节。
uuid CHAR(36) CHARACTER SET ascii
与CHAR相反,VARCHAR值存储为1字节或2字节长度前缀加数据。 长度前缀表示该值中的字节数。 如果值不超过255个字节,则列使用一个长度字节,如果值可能需要超过255个字节,则使用两个长度字节。 https://dev.mysql.com/doc/refman/5.7/en/char.html
虽然要小心CHAR
,即使字段留空,它也会消耗所定义的全部长度。 另外,请确保使用ASCII来设置字符集,否则CHAR
会计划最坏的情况(即utf8
每个字符3个字节, utf8mb4
4个字符)
[...] MySQL必须在CHAR CHARACTER SET utf8mb4列中为每个字符保留四个字节,因为这是最大可能的长度。 例如,MySQL必须为CHAR(10)CHARACTER SET utf8mb4列保留40个字节。 https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
问题是关于在MySQL中存储UUID。
从MySQL的8.0版开始,您可以使用binary(16)
并通过UUID_TO_BIN/BIN_TO_UUID
函数进行自动转换:https: UUID_TO_BIN/BIN_TO_UUID
请注意,mySQL也是一种快速生成UUID作为主键的方法:
INSERT INTO t VALUES(UUID_TO_BIN(UUID(),true))
链接地址: http://www.djcxy.com/p/91475.html