【问题标题】:Two primary keys when creating a table on MySQL在 MySQL 上创建表时的两个主键
【发布时间】:2017-03-08 17:22:31
【问题描述】:

我是 MySql 的新手!我正在尝试创建一个具有 2 个主键或通常称为复合键的表。

CREATE TABLE MovedProduct
(
   MigrationId nvarchar(150)   NOT NULL,
   ContextKey nvarchar(300)  NOT NULL,
   Model varbinary(65535) NOT NULL,
   ProductVersion nvarchar(32) NOT NULL,
   primary key(MigrationId,ContextKey)
)

但我遇到了一个我无法弄清楚的错误。

Error Code: 1071. Specified key was too long; max key length is 1000 bytes

我不会减小密钥大小,因为它们可以达到各自的大小。

为了创建我的表格,我需要做些什么特别的事情吗?

【问题讨论】:

    标签: mysql database open-source composite-primary-key


    【解决方案1】:

    您应该减少所涉及字段的字段长度..因为某些字符集不只使用一个字节作为字符,但更多..存储这些文件时可能会超出键长度的限制

    例如:

    CREATE TABLE MovedProduct
    (
       MigrationId nvarchar(64)   NOT NULL,
       ContextKey nvarchar(128)  NOT NULL,
       Model varbinary(65535) NOT NULL,
       ProductVersion nvarchar(32) NOT NULL,
       primary key(MigrationId,ContextKey)
    )
    

    您的字符集使用 3 个字节来存储一个字符,然后在您的示例中您有 3*150 + 3*400 = 1650
    而是 3*64 + 3*128 = 576

    【讨论】:

      【解决方案2】:

      如果你不需要utf8,那么显式指定latin`:

      MigrationId varchar(150)  CHARACTER SET latin1  NOT NULL,
      ContextKey  varchar(300)  CHARACTER SET latin1  NOT NULL,
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        • 2021-04-10
        • 2016-05-07
        • 2010-12-08
        相关资源
        最近更新 更多