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.5
和symfony 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 在 AWS Elastic Beanstalk 上运行