用表情符号

时间:2016-06-30 07:48:26

标签: mysql sql

我有一个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个选项,这些选项都有权衡:

  1. 我可以使用utf8mb4_unicode_ci整理并选择

    select * from my_table where value like 'prefix%'

    它将以前缀忽略其字符大小写开始所有值,但如果前缀包含emojis则不会找到任何内容

  2. 我可以将集合设置为utf8mb4_bin,如果前缀包含emojis,我的选择会找到值,但会区分大小写

  3. 我能做到

    select * from my_table where LOWER(value) like 'prefix%'

    并且它将使用emojis不敏感地工作,但不会使用索引

  4. 最后我可以将所有值保存为小写并使用utf8mb4_bin校对,但以小写字母保存也是权衡

  5. 是否有任何解决方案可以让我做"喜欢"选择忽略前缀的情况并允许emojis在前缀?

    UPD:我没有存储表情符号的问题,我在找到它们时遇到了问题"喜欢"选择保持不区分大小写的排序规则

1 个答案:

答案 0 :(得分:1)

解决方案是使用MySQL 5.6+并使用utf8mb4_unicode_520_ci排序规则,它不会将所有4个字节的字符视为相等