【问题标题】:What is the replacement for uniqueidentifier in MysqlMysql中uniqueidentifier的替代品是什么
【发布时间】:2012-01-01 01:48:25
【问题描述】:

我有一个来自 SQL Server 的查询,我想在 Mysql 中运行。但我找不到从 SQL Server 脚本到 MYSQL 脚本的 uniqueidentifier 关键字的任何替代品。

这里是查询

 CREATE TABLE foo(
  myid uniqueidentifier NOT NULL,
  barid uniqueidentifier NOT NULL
)

上面的 SQL Server 脚本在 Mysql 中的查询是什么?

【问题讨论】:

    标签: mysql sql-server uniqueidentifier


    【解决方案1】:
    CREATE TABLE FOO (
    myid CHAR(38) NOT NULL,
    barid CHAR(38) NOT NULL
    );
    

    根据 MS 网站,GUID 的长度为 38 个字符。

    【讨论】:

    • UUID 呢?是一样的吗,还是我们需要使用 UUID 函数?
    • UUID 是一个 MySQL 函数,它返回 GUID - 它对存储它没有任何作用。指定myid CHAR(38) NOT NULL 是一个创建名为myid 的列的语句,它的类型是CHAR,长度正好是38 个字符。由于 GUID 有效地表示为 38 字节的字符串,因此您需要将其存储为这样。这就是为什么 MySQL 中没有“快捷方式”,您需要显式设置列数据类型,然后您可以调用内部函数,其结果存储在新创建的表中。
    • 好的。。非常感谢。。ROWGUIDCOL 是否也以同样的方式工作。?
    • 如果 ROWGUIDCOL 存储与 GUID 相关的任何内容,这意味着它肯定会被表示为一个字符串,所以 - 是的,在 MySQL 中,你会将其保存为 CHAR(如果长度可变,则保存为 VARCHAR) .
    • 非常感谢.. 非常感谢您的帮助
    【解决方案2】:

    接受的答案,虽然不完全是错误,但有些不完整。当然有更多空间有效的方式来存储 GUID/UUID。请看这个问题:"Storing MySQL GUID/UUIDs"

    这是我能想到的将 UUID() 生成的 MySQL GUID/UUID 转换为二进制文件 (16) 的最佳方法:

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

    然后将其存储在 BINARY(16) 中

    如果 GUID/UUID 的存储空间是主要问题,则此方法将显着节省。

    【讨论】:

      【解决方案3】:

      根据 MySQL 网站,您应该将其与 VARCHAR(64) 匹配

      UNIQUEIDENTIFIER,   VARCHAR(64)
      

      http://dev.mysql.com/doc/workbench/en/wb-migration-database-mssql-typemapping.html

      【讨论】:

        【解决方案4】:

        还请记住,16 字节的值在十六进制中表示为 32 字节。使用 4 个破折号和 2 个花括号,我们得到了这种格式的 38 个字节,它与 SQL Server 兼容,带有 38 个字节的字符串。例如:{2DCBF868-56D7-4BED-B0F8-84555B4AD691}。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-22
          • 2011-05-07
          • 2012-04-24
          • 2019-12-03
          • 2010-09-17
          • 2012-03-27
          • 2012-09-30
          • 2010-10-20
          相关资源
          最近更新 更多