【问题标题】:MySQL 5.7 character_set_client stack at utf8mb4MySQL 5.7 character_set_client 堆栈在 utf8mb4
【发布时间】: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=utf8mb4character_set_results=utf8mb4 我找不到更改它的方法。

问题是,当我尝试从我们的生产服务器(通过我们的 CMS)导入我们的开发服务器转储时,或者当我尝试使用 ü 等特殊字符保存文本时>ä 它总是在出现时剪切单词并仅保存其余部分,例如而不是 chüd 将只保存 ch 或代替 einträge 它只保存 eintr

但是我可以在数据库中手动保存 ü 没有问题(不必使用ü

(我们有第二个开发服务器,Ubuntu 14.04、apache2.4、PHP5.6、MySQL5.7 和 PHP7.2 测试服务器上的设置基本相同,一切正常)

也许 PHP7.2 在这里搞砸了,我真的没有想法。

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: php mysql utf8mb4


    【解决方案1】:

    参见Trouble with UTF-8 characters; what I see is not what I stored中的“截断”

    我想知道如果没有将 apache 设置为 UTF-8 会不会搞砸 <form>s

    init_connect = 'SET NAMES utf8' 设置 3 个CHARACTER_SET_%如果您不是以“root”身份连接。所以,把它改成utf8mb4,不要以“root”身份连接。

    您确定导入数据中的编码吗? (我怀疑这会导致截断问题。)你能得到一小部分数据的十六进制转储吗?

    对于西欧语言,MySQL 的 utf8utf8mb4 工作方式相同。也就是说,您拥有的init_connect 应该足够_如果传入的数据真的是UTF-8,而不是iso...

    这里是十六进制值供参考:

    char latin1 utf8
    ä    E4     C3A4
    ü    FC     C3BC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2017-03-27
      • 1970-01-01
      • 2018-01-27
      • 2021-08-05
      • 2014-06-23
      相关资源
      最近更新 更多