我正在尝试从symfony4中的实体创建数据库。但结果是:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
我知道这是因为它试图使用utf8mb4字符集和utf8mb4\ unicode\ ci排序规则。我已尝试将document.yaml文件替换为utf8和utf8\u unicode\u ci以及:
@ORM\Table(name="users", options={"collate"="utf8_unicode_ci", "charset"="utf8", "engine"="MyISAM"})
但它仍在尝试使用utf88mb4。如何强制它使用utf8?
5条答案
按热度按时间h4cxqtbf1#
错误:在pdoconnection.php第88行:sqlstate[42000]:语法错误或访问冲突:1071指定的键太长;最大密钥长度为767字节
框架:symfony 4.4
解决方案:
更新文件config/document.yaml
zsohkypk2#
我们已经将“config/document.yaml”中的“server\u version”更新为“mariadb-10.1.34”,将“charset”更新为“utf8mb4”。更新后,我们必须运行以下命令:
这里是“config/document.yaml”供您参考。
裁判:https://github.com/symfony/symfony/issues/27166#issuecomment-524041055
nxowjjhe3#
嗨,我得到相同的错误:sqlstate[42000]:语法错误或访问冲突:1071指定的键太长;最大密钥长度为767字节
我将其修改为191,如下:@orm\column(type=“string”,length=191,unique=true)
o2rvlv0m4#
这是我的解决方案:
将varchar上的255改为191——您将丢失任何超过191个字符的值(不太可能?);
参考
bz4sfanl5#
好的,我已经找到了答案,所以基本上我有很多迁移文件,php一直在尝试用旧的配置创建数据库。为了正确地创建它,我删除了migrations目录并使用
php bin/console doctrine:cache:clear-metadata
.这很有帮助,现在创建者使用了新的配置。