DROP DATABASE IF EXISTS <YOUR_DATABASE_NAME>;
CREATE DATABASE <YOUR_DATABAE_NAME> DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
以上命令在我的特定场景中帮助了我 . 我使用'Sequelize ' to create tables on run time. When I tried to run my code in Ubuntu after creating database with simple ' CREATE DATABASE'命令,我得到了这个1071错误 .
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
7 回答
PRIMARY KEY (realurl,catagory)
的大小为(200 200)* 3 = 1,200字节,大于1,000字节限制,因为MySQL将utf8编码的字符存储为3个字节 .您需要减小构成主键的字段的大小,或者可以将MySQL版本升级到最新版本 .
另请参阅另一个问题:Error: Specified key was too long; max key length is 1000 bytes .
出现此常见问题的原因是默认情况下MySql对列名使用字符限制 . 这是:
我们需要的是以下内容:
为了摆脱这个问题,我建议在创建数据库时使用utf8,同时将COLLATE设置为utf8_general_ci . 我更喜欢使用以下命令在MariaDb或MySql中创建数据库:
以上命令在我的特定场景中帮助了我 . 我使用'Sequelize ' to create tables on run time. When I tried to run my code in Ubuntu after creating database with simple ' CREATE DATABASE'命令,我得到了这个1071错误 .
使用utf8字符集和整理运行上面的命令帮助我摆脱了错误 .
MySQL在InnoDB中具有767字节的前缀限制,在MyISAM中具有1000字节 . 这对我来说从来都不是问题,直到我开始使用UTF-16作为我的一个数据库的字符集 . UTF-16每个字符最多可以使用4个字节,这意味着在InnoDB表中,您不能拥有超过191个字符的任何密钥 .
我解决了这个问题 . 使用以下命令创建数据库 .
您可以删除“您的数据库”并再次创建:
或更改配置文件 . 打开/etc/mysql/mariadb.conf.d/50-server.cnf并更改:
如果您已更改
innodb_log_file_size
尝试恢复以前的值 .要解决这个问题,您只需编辑AppServiceProvider.php文件并在boot方法中设置默认字符串长度:
Laravel 5.4对默认数据库字符集进行了更改,现在是utf8mb4,其中包括对存储表情符号的支持 . 这只会影响新的应用程序,只要您运行MySQL v5.7.7及更高版本,就不需要做任何事情 .
对于运行MariaDB或旧版MySQL的用户,在尝试运行迁移时可能会遇到此错误: