Php utf8mb4的MySQL 5.7字符集客户端堆栈
长话短说:我们有一个基于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中,我有:Php utf8mb4的MySQL 5.7字符集客户端堆栈,php,mysql,utf8mb4,Php,Mysql,Utf8mb4,长话短说:我们有一个基于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.in
default_charset = "iso-8859-1"
[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
在/etc/mysql/my.cnf中,我有:default_charset = "iso-8859-1"
[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\u set\u client=utf8mb4
和character\u set\u results=utf8mb4
我找不到改变它的方法
问题是,当我试图从生产服务器(通过我们的CMS)导入开发服务器转储文件时,或者当我试图保存带有特殊字符(如ü或ä的文本时,它总是在出现时剪切单词,只保存其余的单词,例如,代替chüd只保存ch或代替einträge只保存eintr
但是,我可以在DB中手动保存ü,没有问题(不必使用ü;
)
(我们有第二个开发服务器,Ubuntu 14.04、apache2.4、PHP5.6、MySQL5.7,基本上与PHP7.2 testserver上的设置相同,一切正常)
也许PHP7.2把这里搞得一团糟,我真的没有主意了
任何帮助都将不胜感激。谢谢请参见中的“截断”
我想知道apache没有设置为UTF-8是否会弄糟s
init\u connect='SET NAMES utf8'
SET 3CHARACTER\u SET%
如果您不是以“root”身份连接,则设置值。因此,将其更改为utf8mb4
,并且不要以“root”身份连接
您确定导入数据中的编码吗?(我怀疑这会导致截断问题。)你能得到一小部分数据的十六进制转储吗
对于西欧语言,MySQL的utf8
和utf8mb4
工作原理相同。也就是说,如果传入的数据实际上是UTF-8,而不是iso,那么您拥有的init\u connect
应该足够了
以下是十六进制值供参考:
char latin1 utf8
ä E4 C3A4
ü FC C3BC