首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 5.7 character_set_client堆栈在utf8mb4上

MySQL 5.7 character_set_client堆栈在utf8mb4上
EN

Stack Overflow用户
提问于 2020-09-24 10:14:07
回答 1查看 326关注 0票数 0

长话短说:我们有一个基于PHP5.x和MySQL的基于PHP的自主开发的CMS,它使用了utf8和iso-8859-1字符集的健康组合(不要判断,我知道这很奇怪,但它是有效的)。在我们的生产环境中,我们的服务器提供者升级到了PHP7.2,并且(经过几周的重构)一切都很好。

与此生产环境并行,我为我们的开发设置了一个测试环境,VirtualBox Ubuntu20.04、apache2.4、PHP7.2和MySQL5.7。

/etc/php/7.2/apache2/php.ini中,我有:

代码语言:javascript
复制
default_charset = "iso-8859-1"

/etc/mysql/my.cnf中,我有:

代码语言:javascript
复制
[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 geE 217它只保存E 118eintrE 219。

不过,我可以在DB中手动保存ü,没有问题(不需要使用ü)

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

也许PHP7.2在这里搞砸了,我真的想不出来了。

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

EN

回答 1

Stack Overflow用户

发布于 2020-09-24 19:39:26

参见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_%值。因此,将其更改为utf8mb4,不要以“根”的形式连接。

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

对于西欧语言,MySQL的utf8utf8mb4的工作原理是一样的。也就是说,您拥有的init_connect应该是足够的_if传入的数据实际上是UTF-8,而不是iso.

以下是十六进制值供参考:

代码语言:javascript
复制
char latin1 utf8
ä    E4     C3A4
ü    FC     C3BC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64044286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档