Symfony 4 SQLSTATE[42000] 指定的密钥太长



我正在尝试从Symfony 4中的实体创建数据库。但是结果是:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

我知道这是因为它试图使用 utf8mb4 字符集和utf8mb4_unicode_ci排序规则。我试图将我的 doctrine.yaml 文件替换为 utf8 和 utf8_unicode_ci 以及:

@ORMTable(name="users", options={"collate"="utf8_unicode_ci", "charset"="utf8", "engine"="MyISAM"})

但它仍在尝试使用 utf88mb4。如何强制它使用 utf8?

嗨,我得到同样的错误:SQLSTATE[42000]:语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节

我像这样将长度更改为 191来修复它:@ORM\Column(type="string", length=191, unique=true(

错误在PDOConnection中.php第88行: SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键为 t 乌龙;最大密钥长度为 767 字节

框架:Symfony 4.4

解决方案

更新文件config/doctrine.yaml

学说: 分贝: URL: '%env(resolve:DATABASE_URL(%' server_version : '5.0' 字符集:UTF8 default_table_options: 字符集:UTF8 整理:utf8_unicode_ci

我们在"config/doctrine.yaml"中将"server_version"更新为"mariadb-10.1.34",将"charset"更新为"utf8mb4"。更新后,我们必须运行以下命令:

php bin/console doctrine:schema:drop
php bin/console doctrine:schema:create
php bin/console doctrine:schema:validate

这是"config/doctrine.yaml"供您参考。

doctrine:
dbal:
url: "%env(resolve:DATABASE_URL)%"
server_version: "mariadb-10.1.34"
charset: utf8
default_table_options:
charset: utf8
collate: utf8_unicode_ci
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: "%kernel.project_dir%/src/Entity"
prefix: 'AppEntity'
alias: App

参考: https://github.com/symfony/symfony/issues/27166#issuecomment-524041055

好的,我已经找到了答案,所以基本上我有很多迁移文件,php不断尝试使用旧配置创建数据库。为了正确创建它,我删除了迁移目录并使用

php bin/console doctrine:cache:clear-metadata.

这很有帮助,现在创建者使用了新配置。

这是我的解决方案:

在 VARCHAR 上将 255 更改为 191 - 您将丢失任何超过 191 个字符的值(不太可能?

参考

相关内容

  • 没有找到相关文章

最新更新