symfony 4 sqlstate[42000]指定的密钥太长

hfyxw5xn  于 2021-06-21  发布在  Mysql
关注(0)|答案(5)|浏览(518)

我正在尝试从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?

h4cxqtbf

h4cxqtbf1#

错误:在pdoconnection.php第88行:sqlstate[42000]:语法错误或访问冲突:1071指定的键太长;最大密钥长度为767字节
框架:symfony 4.4
解决方案:
更新文件config/document.yaml

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        server_version : '5.0'
        charset: utf8
        default_table_options:
            charset: utf8
            collate: utf8_unicode_ci
zsohkypk

zsohkypk2#

我们已经将“config/document.yaml”中的“server\u 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/document.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: 'App\Entity'
        alias: App

裁判:https://github.com/symfony/symfony/issues/27166#issuecomment-524041055

nxowjjhe

nxowjjhe3#

嗨,我得到相同的错误:sqlstate[42000]:语法错误或访问冲突:1071指定的键太长;最大密钥长度为767字节
我将其修改为191,如下:@orm\column(type=“string”,length=191,unique=true)

o2rvlv0m

o2rvlv0m4#

这是我的解决方案:
将varchar上的255改为191——您将丢失任何超过191个字符的值(不太可能?);
参考

bz4sfanl

bz4sfanl5#

好的,我已经找到了答案,所以基本上我有很多迁移文件,php一直在尝试用旧的配置创建数据库。为了正确地创建它,我删除了migrations目录并使用 php bin/console doctrine:cache:clear-metadata .
这很有帮助,现在创建者使用了新的配置。

相关问题