【发布时间】:2021-01-10 14:51:06
【问题描述】:
长话短说:我们有一个基于 PHP 的自研 CMS,最初基于 PHP5.x 和 MySQL,使用 utf8 和 iso-8859-1 字符集的健康组合(不要判断,我知道它是很奇怪,但它正在工作)。在我们的生产环境中,我们的服务器提供商升级到 PHP7.2,并且(经过几周的重构)一切正常。
与这个生产环境平行,我已经为我们的开发、VirtualBox Ubuntu 20.04、apache2.4、PHP7.2 和 MySQL5.7 设置了(或至少我尝试过)测试环境。
在 /etc/php/7.2/apache2/php.ini 我有:
default_charset = "iso-8859-1"
在 /etc/mysql/my.cnf 我有:
[client]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
init_connect = 'SET NAMES utf8'
character-set-client-handshake = false #force encoding to uft8
character-set-server = utf8
collation-server = utf8_unicode_ci
现在,在我们的开发服务器上,character_set_client=utf8mb4 和 character_set_results=utf8mb4 我找不到更改它的方法。
问题是,当我尝试从我们的生产服务器(通过我们的 CMS)导入我们的开发服务器转储时,或者当我尝试使用 ü 或 等特殊字符保存文本时>ä 它总是在出现时剪切单词并仅保存其余部分,例如而不是 chüd 将只保存 ch 或代替 einträge 它只保存 eintr。
但是我可以在数据库中手动保存 ü 没有问题(不必使用ü)
(我们有第二个开发服务器,Ubuntu 14.04、apache2.4、PHP5.6、MySQL5.7 和 PHP7.2 测试服务器上的设置基本相同,一切正常)
也许 PHP7.2 在这里搞砸了,我真的没有想法。
任何帮助将不胜感激。谢谢
【问题讨论】: