Mysql中uniqueidentifier的替代品是什么
我有一个来自SQL Server的查询,我想在Mysql中运行它。但是我找不到从SQL Server脚本到MYSQL脚本的Mysql中uniqueidentifier的替代品是什么,mysql,sql-server,uniqueidentifier,Mysql,Sql Server,Uniqueidentifier,我有一个来自SQL Server的查询,我想在Mysql中运行它。但是我找不到从SQL Server脚本到MYSQL脚本的uniqueidentifier关键字的任何替换项 这是一个问题 CREATE TABLE foo( myid uniqueidentifier NOT NULL, barid uniqueidentifier NOT NULL ) 对于上述相同的SQL Server脚本,Mysql中的查询将是什么 CREATE TABLE FOO ( myid CHAR(38)
uniqueidentifier
关键字的任何替换项
这是一个问题
CREATE TABLE foo(
myid uniqueidentifier NOT NULL,
barid uniqueidentifier NOT NULL
)
对于上述相同的SQL Server脚本,Mysql中的查询将是什么
CREATE TABLE FOO (
myid CHAR(38) NOT NULL,
barid CHAR(38) NOT NULL
);
据微软网站称,GUID的长度为38个字符。公认的答案虽然不是完全错误,但有点不完整。当然有更节省空间的方法来存储GUID/UUID。请看一下这个问题: 这是将UUID()生成的MySQL GUID/UUID转换为二进制文件(16)的最佳方法: 然后将其存储在二进制文件中(16)
如果GUID/UUID的存储空间是一个主要问题,那么这种方法将带来显著的节约。根据MySQL网站,您应该将其与VARCHAR(64)相匹配
还要记住,16字节的值用十六进制表示为32字节。通过4个破折号和2个大括号,我们可以得到与SQL Server兼容的38字节格式的38字节字符串。例如:{2DCBF868-56D7-4BED-B0F8-84555B4AD691}。UUID呢?这是相同的,还是我们需要使用UUID函数来实现这一点?
UUID
是一个MySQL函数,它返回GUID-它不做任何存储操作。指定myid CHAR(38)NOT NULL
是一条语句,它创建一个名为myid
的列,其类型为CHAR
,长度正好是38个字符。由于GUID有效地表示为38字节的字符串,因此需要将其存储为38字节的字符串。这就是MySQL中没有“快捷方式”的原因,您需要显式设置列数据类型,然后可以调用内部函数,这些函数的结果存储在新创建的表中。明白了。。非常感谢你。。ROWGUIDCOL是否也以同样的方式工作?如果ROWGUIDCOL存储了任何与GUID相关的内容,这意味着它肯定会被表示为一个字符串,所以-是的,在MySQL中,您可以将其保存为CHAR(或者VARCHAR,如果长度是可变的)。非常感谢。。非常感谢你的帮助
UNHEX(REPLACE(UUID(),'-',''))
UNIQUEIDENTIFIER, VARCHAR(64)