我试图在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
答案 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限制:
对于较新版本,限制大约是该版本的4倍。
如果你确实需要PRIMARY KEY
或UNIQUE KEY
大于可用限制,我们可以使用哈希等讨论技巧。但我们需要了解它是什么类型的数据,你是什么版本使用,你需要什么样的charset等。