我们在Oracle数据库中使用UUID作为主键,并尝试确定适当的VARCHAR最大字符长度。 显然,这是36个字符,但我们注意到生成的UUID的长度超过了这个值 - 长度长达60个字符。 有人知道UUID的合适最大字符长度吗?
我们在Oracle数据库中使用UUID作为主键,并尝试确定适当的VARCHAR最大字符长度。 显然,这是36个字符,但我们注意到生成的UUID的长度超过了这个值 - 长度长达60个字符。 有人知道UUID的合适最大字符长度吗?
RFC4122第3节提供了UUID字符串表示的正式定义。它由36个字符组成(32个十六进制数字和4个破折号)。
听起来好像你需要找出这些无效的60个字符的ID来自哪里,并决定 1)是否要接受它们,以及 2)根据生成它们的任何API确定这些ID的最大长度。
顺便提一下,如果每个值的长度都相同的话,CHAR 36 就是定义这种字段的完美类型,而不是VARCHAR 36。并且你会使用更少的存储空间,因为你不需要为每个值存储数据长度,只需要存储值本身即可。
[0-9A-Fa-f-]
,这是ASCII中23个不同的八位字节。 - cowbert现在大多数数据库都有原生的UUID类型,以便更容易地使用它们。如果你的数据库没有这种类型,那么UUID只是128位数字,因此你可以使用BINARY(16)。如果你经常需要文本格式来进行故障排除等操作,则可以添加一个计算列来自动从二进制列生成它。没有什么好的理由去存储(更大的)文本形式。
MySQL https://blogs.oracle.com/mysql/post/mysql-uuids https://dev.mysql.com/blog-archive/storing-uuid-values-in-mysql-tables/
Microsoft SQL https://learn.microsoft.com/zh-cn/sql/t-sql/data-types/uniqueidentifier-transact-sql?view=sql-server-ver16
Postgres https://www.postgresql.org/docs/current/datatype-uuid.html
MongoDB https://www.mongodb.com/docs/manual/reference/method/UUID/
VARCHAR
的原因? - user565869