MariaDB不会创建具有大型VARCHAR的表作为PRIMARY KEY

时间:2016-12-16 02:42:16

标签: mysql database mariadb

我试图在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

3 个答案:

答案 0 :(得分:0)

您使用的是哪个版本?我在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)

答案 1 :(得分:0)

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

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

一般情况下,我不鼓励对任何长期使用索引,尤其是主键。我使用代理(如整数)。

而且,实际上,一个700字符的用户名变得有点笨拙。

答案 2 :(得分:0)

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

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

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

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

对于较新版本,限制大约是该版本的4倍。

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