Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php utf8mb4的MySQL 5.7字符集客户端堆栈_Php_Mysql_Utf8mb4 - Fatal编程技术网

Php utf8mb4的MySQL 5.7字符集客户端堆栈

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

长话短说:我们有一个基于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"
[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 3
CHARACTER\u SET%
如果您不是以“root”身份连接,则设置值。因此,将其更改为
utf8mb4
,并且不要以“root”身份连接

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

对于西欧语言,MySQL的
utf8
utf8mb4
工作原理相同。也就是说,如果传入的数据实际上是UTF-8,而不是iso,那么您拥有的
init\u connect
应该足够了

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

char latin1 utf8
ä    E4     C3A4
ü    FC     C3BC