Symfony配置更新后仍报utf8编码不支持错误(MSSQL+sqlsrv)
核心原因
错误提示SQLSTATE [IMSSP, -48]: The encoding 'utf8' is not a supported encoding for the CharacterSet connection option表明,应用仍在尝试将utf8作为数据库连接的字符集,而你在doctrine.yaml中配置的charset: 'cp1254'并未生效,大概率是被环境变量中的数据库URL参数覆盖了。
具体解决步骤
检查并修正
DATABASE_URL参数
打开项目根目录下的.env或.env.local文件,查看DATABASE_URL是否包含charset=utf8的参数。例如类似:DATABASE_URL="sqlsrv://username:password@host:port/db_name?charset=utf8"若存在该参数,将其替换为
charset=CP1254,或者直接删除该参数,让doctrine.yaml中的配置生效。统一字符集配置的大小写
sqlsrv驱动对字符集名称的大小写有严格要求,将doctrine.yaml中的charset: 'cp1254'修改为charset: 'CP1254',避免因大小写不匹配导致驱动无法识别。清除Symfony缓存
修改配置后,执行以下命令清除缓存,确保新配置生效:# 生产环境 php bin/console cache:clear --env=prod # 开发环境 php bin/console cache:clear --env=dev验证实际连接参数
可以在控制器或自定义命令中添加临时代码,确认数据库连接使用的字符集:$connection = $this->getDoctrine()->getConnection(); var_dump($connection->getParams()['charset']); exit;执行后查看输出,确认字符集是否为你配置的
CP1254。
额外建议
如果你的MSSQL 2017数据库支持UTF-8编码,更推荐使用UTF-8作为连接字符集(注意是带连字符的格式),此时只需将配置中的CP1254替换为UTF-8即可,能更好地兼容多语言场景。
内容的提问来源于stack exchange,提问作者Onur

