Symfony 4,Postgres - 在运行教义命令时`参数“client_encoding”的无效值:“utf8mb4”`

Posted

技术标签:

【中文标题】Symfony 4,Postgres - 在运行教义命令时`参数“client_encoding”的无效值:“utf8mb4”`【英文标题】:Symfony 4, Postgres - `Invalid value for parameter "client_encoding": "utf8mb4"` on running doctrine command 【发布时间】:2019-02-19 16:01:29 【问题描述】:

问题

我有一个全新的postgres 10.5symfony 4 应用程序设置在php 7.1 上运行。但是当我尝试运行迁移时。我不断收到以下Invalid value for parameter "client_encoding": "utf8mb4" 错误。

复制步骤

    .env 文件上,根据您的设置修改 DSN 以更正值,例如。我的是DATABASE_URL="pgsql://postgres:password@db:5432/a_db"。 使用php bin/console make:entity 创建一个实体(任何都可以) 制作迁移文件php bin/console make:migration

预期结果

我应该收到Success 消息。

所以我的问题是

我在关注documentation 时错过了什么?

【问题讨论】:

【参考方案1】:

所以我在 postgres 中的实际客户端配置是 utf8 而不是 utf8mb4。 symfony 似乎不会自动为我们检测版本和数据库。

Symfony 4 在配置文件config/packages/doctrine.yaml 中保留了mysql 的标准utf8mb4。这个配置文件不要忘记根据这些allowed configuration进行更改。所以当我改变值时问题就解决了

来自

dbal: driver: 'pdo_mysql' server_version: '5.7' charset: utf8mb4 default_table_options: charset: utf8mb4 collate: utf8mb4_unicode_ci

dbal: driver: 'pdo_postgresql' server_version: '10.5' charset: utf8 default_table_options: charset: utf8 collate: utf8_unicode_ci

【讨论】:

谁曾发表过反对票。,如果您发表评论会很有帮助。为什么我的答案值得投票而不是默默地逃跑。 看不到任何不赞成票的理由,所以我给你赞成票 ;-) 顺便说一句:您可以将字符集附加到 .env 内的 DATABASE_URL 中,如下所示:DATABASE_URL="pgsql://postgres:password@db:5432/a_db?charset=UTF-8 看起来像这样并没有真正记录在任何地方,所以我打开了这个github.com/symfony/symfony-docs/pull/10410 我相信最好删除default_table_options,以便数据库默认控制这些设置,而不是Doctrine。但是 utf8_unicode_ci 是 MySQL 独有的,不适用于使用 en_US.UTF-8 的 PostgreSQL,如 Doctrine DBAL test【参考方案2】:

对我来说,它有助于将编码添加到数据库 URL,如下所示:

postgres://api-platform:!ChangeMe!@db/api?charset=UTF-8

虽然这个问题只发生在APP_ENV=prod

【讨论】:

以上是关于Symfony 4,Postgres - 在运行教义命令时`参数“client_encoding”的无效值:“utf8mb4”`的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4 在 DEV 中运行缓慢

Symfony 4 在 AWS Elastic Beanstalk 上运行

运行服务器 Symfony 4

无法让我的邮件服务在Symfony 4中运行

在 SF3.4 及更高版本中运行 Symfony DIC 烟雾测试

Symfony 4 部署后找不到翻译文件