Php 使用集合名称utf8mb4和utf8表格
在基于Mysql 5.5.57 Php 5.6.37设置的大型系统中 目前,整个系统在utf8中工作,包括在每个db连接的开始处设置名称utf8 我需要在其中一个表中支持emojis,所以我需要将其切换到utf8mb4。我不想换其他桌子 我的问题是-如果我更改为为所有连接(utf8和utf8mb4)设置名称utf8mb4,并且仅将特定表切换为utf8mb4(并且仅将mb4数据写入此表)。系统的其余部分会像以前一样工作吗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会有任何问题吗?我认为对
在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会更好吗?如果我实施混合计划,开发工作和安全性将受到怎样的影响?赌注是什么?最坏的情况是什么?”