【问题标题】:MariaDB won't create table with large VARCHAR as PRIMARY KEYMariaDB 不会创建以大 VARCHAR 作为 PRIMARY KEY 的表
【发布时间】:2017-05-01 18:47:46
【问题描述】:

我试图在 MariaDB 中创建一个表,我希望它是 VARCHAR(767) 和 PRIMARY KEY。我使用了这个命令,但这不是我想要的。

CREATE TABLE main(username VARCHAR(767)  NOT NULL);

这个命令执行了,但是如果我添加PRIMARY KEY就会出现错误。

CREATE TABLE main(username VARCHAR(767) NOT NULL PRIMARY KEY);
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

【问题讨论】:

    标签: mysql database mariadb


    【解决方案1】:

    你用的是什么版本?我已经在我的 MariaDB (10.1.20-MariaDB) 上尝试过你的命令,主键可以创建为 varchar 767 long。

    MariaDB [test]> CREATE TABLE main(username VARCHAR(767)  NOT NULL);
    Query OK, 0 rows affected (0.05 sec)
    
    MariaDB [test]> drop table main;
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [test]> CREATE TABLE main(username VARCHAR(767) NOT NULL PRIMARY KEY);
    Query OK, 0 rows affected (0.02 sec)
    
    MariaDB [test]> select version();
    +-----------------+
    | version()       |
    +-----------------+
    | 10.1.20-MariaDB |
    +-----------------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 10.0.28-MariaDB 这在osx中​​没有发生,但是我在Ubuntu上试了一下,出现了错误
    【解决方案2】:

    限制在数据库引擎中索引键的长度

    这里有更多的讨论。 What is the index key size limit in MariaDB?

    一般来说,我不鼓励对任何很长的东西使用索引,尤其是主键。我会使用代理项(如整数)。

    而且,真的,一个 700 个字符的用户名有点笨拙。

    【讨论】:

      【解决方案3】:

      VARCHAR(767) 允许 767 个字符。如果默认字符集是 utf8,则需要 3*767 字节

      旧版本的索引中单个列的限制为 767 个字节。 (而PRIMARY KEY 是一个索引。)

      以下是旧版本中的 varchar 限制:

      • latin1:765 个字符(长度+2 个字节;每个字符为 1 个字节
      • utf8:255 个字符(utf8 是“真实”utf8 的 3 字节子集)
      • utf8mb4:191 个字符(允许 4 字节 utf8 编码。

      对于较新的版本,限制约为 4 倍。

      如果您确实需要大于可用限制的PRIMARY KEYUNIQUE KEY,我们可以讨论使用哈希等技巧。但是我们需要了解它是什么类型的数据,您使用的是什么版本,什么字符集你需要等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-04
        • 2020-05-04
        • 2012-06-10
        • 2013-11-29
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多