CREATE TABLE mini
(
realurl varchar(200) NOT NULL,
catagory varchar(200),
PRIMARY KEY (realurl,catagory),
FOREIGN KEY (realurl) REFERENCES main(realurl)
)
Run Code Online (Sandbox Code Playgroud)
错误:`#1071 - 指定密钥太长; 最大密钥长度为1000字节
为什么我不能创建这个表?我应该更改什么来创建此表?
S.M*_*hra 19
出现此常见问题的原因是默认情况下MySql对列名使用字符限制.这是:
INNODB utf8mb4 VARCHAR(191)
Run Code Online (Sandbox Code Playgroud)
我们需要的是以下内容:
INNODB utf8 VARCHAR(255)
Run Code Online (Sandbox Code Playgroud)
为了摆脱这个问题,我建议在创建数据库时使用utf8,同时将COLLATE设置为utf8_general_ci.我更喜欢使用以下命令在MariaDb或MySql中创建数据库:
DROP DATABASE IF EXISTS <YOUR_DATABASE_NAME>;
CREATE DATABASE <YOUR_DATABAE_NAME> DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)
以上命令在我的特定场景中帮助了我.我使用' Sequelize '在运行时创建表.当我在使用简单的'CREATE DATABASE'命令创建数据库后尝试在Ubuntu中运行我的代码时,我得到了这个1071错误.
使用utf8字符集和整理运行上面的命令帮助我摆脱了错误.
小智 12
PRIMARY KEY (realurl,catagory) 大小为(200 + 200)*3 = 1,200字节,大于1,000字节限制,因为MySQL将utf8编码的字符存储为3字节.
您需要减小构成主键的字段的大小,或者可以将MySQL版本升级到最新版本.
另请参阅另一个问题:错误:指定的密钥太长; 最大密钥长度为1000字节.
MySQL在InnoDB中具有767字节的前缀限制,在MyISAM中具有1000字节.这对我来说从来都不是问题,直到我开始使用UTF-16作为我的一个数据库的字符集.UTF-16每个字符最多可以使用4个字节,这意味着在InnoDB表中,您不能拥有超过191个字符的任何密钥.
我解决了这个问题。使用以下命令创建数据库。
CREATE DATABASE CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69579 次 |
| 最近记录: |