我正在尝试从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 个字符的值(不太可能?
参考