Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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和utf8表格_Php_Mysql_Encoding_Utf8mb4 - Fatal编程技术网

Php 使用集合名称utf8mb4和utf8表格

Php 使用集合名称utf8mb4和utf8表格,php,mysql,encoding,utf8mb4,Php,Mysql,Encoding,Utf8mb4,在基于Mysql 5.5.57 Php 5.6.37设置的大型系统中 目前,整个系统在utf8中工作,包括在每个db连接的开始处设置名称utf8 我需要在其中一个表中支持emojis,所以我需要将其切换到utf8mb4。我不想换其他桌子 我的问题是-如果我更改为为所有连接(utf8和utf8mb4)设置名称utf8mb4,并且仅将特定表切换为utf8mb4(并且仅将mb4数据写入此表)。系统的其余部分会像以前一样工作吗 在utf8表/数据/连接中使用集合名称utf8mb4会有任何问题吗?我认为对

在基于Mysql 5.5.57 Php 5.6.37设置的大型系统中

目前,整个系统在utf8中工作,包括在每个db连接的开始处设置名称utf8

我需要在其中一个表中支持emojis,所以我需要将其切换到utf8mb4。我不想换其他桌子

我的问题是-如果我更改为为所有连接(utf8和utf8mb4)设置名称utf8mb4,并且仅将特定表切换为utf8mb4(并且仅将mb4数据写入此表)。系统的其余部分会像以前一样工作吗


在utf8表/数据/连接中使用集合名称utf8mb4会有任何问题吗?

我认为对所有连接使用
集合名称utf8mb4应该没有问题

utf8mb3
是MySQL中
utf8
的同义词;为了清晰起见,我将使用前者。)

utf8mb3
utf8mb4
的一个子集,因此无论哪种方式,客户端的字节都会很满意(Emoji除外,它需要utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以验证您没有存储表情符号或某些汉字,否则,它将以最小的麻烦通过

我建议

 ALTER TABLE ... CONVERT TO utf8mb4
作为转换表的“正确”方式。但是,它会转换所有varchar/text列。这可能很糟糕

如果
将已转换的表连接到未转换的表,则将尝试比较utf8mb3字符串和utf8mb4字符串。MySQL将举手并将所有行从一行转换到另一行。也就是说,
索引
将是有用的


所以。。。请确保至少与
联接中涉及的任何列保持一致

可能的重复项而不是重复项。我个人在询问utf8和utf8mb4的混合使用情况,我建议您完全切换到utf8mb4。甚至MySQL团队也声称utf8mb4现在比utf8快得多。参考:PS:不是我的否决票:-)PSA:可能是时候更新到5.6.38了,因为有一个“如果这是可行的,我是否希望这是系统向前发展的方式?离开utf8,换上utf8mb4会更好吗?如果我实施混合计划,开发工作和安全性将受到怎样的影响?赌注是什么?最坏的情况是什么?”