我有一个varchar值的表,需要用emojis存储文本值:
CREATE TABLE `my_table` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `value_idx` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
现在我需要在此表上选择以查找以prefix开头的所有值。选择必须不区分大小写,并且必须与表情符号匹配。到目前为止,我找到了4个选项,这些选项都有权衡:
我可以使用utf8mb4_unicode_ci整理并选择
select * from my_table where value like 'prefix%'
它将以前缀忽略其字符大小写开始所有值,但如果前缀包含emojis则不会找到任何内容
我可以将集合设置为utf8mb4_bin,如果前缀包含emojis,我的选择会找到值,但会区分大小写
我能做到
select * from my_table where LOWER(value) like 'prefix%'
并且它将使用emojis不敏感地工作,但不会使用索引
最后我可以将所有值保存为小写并使用utf8mb4_bin校对,但以小写字母保存也是权衡
是否有任何解决方案可以让我做"喜欢"选择忽略前缀的情况并允许emojis在前缀?
UPD:我没有存储表情符号的问题,我在找到它们时遇到了问题"喜欢"选择保持不区分大小写的排序规则
答案 0 :(得分:1)
解决方案是使用MySQL 5.6+并使用utf8mb4_unicode_520_ci排序规则,它不会将所有4个字节的字符视为相等