emoji 问题总结

一、不同的emoji插入到mysql表中,出现唯一键冲突 

业务场景:手机号注册用户,默认昵称为  宝宝+emoji+手机尾号,用户表中昵称字段要求唯一不可重复,存在唯一键。   (已使用utf8mb4字符集)

问题:

1、插入时  产生唯一键冲突   

原因:字符集使用了utf8mb4,但它的默认排序集是 utf8mb4_general_ci 。utf8mb4_general_ci 不区分特殊字符, 不区分大小写。

概念:

字符:文字与符号的总称,包括文字、图形符号、数学符号等。英文26个字母,中文。

编码:将字符转为二进制的规则。如:ASCII码       A->65

字符集:一套字符与编码的合集。

排序集:指对字符集中字符串之间的比较、排序制定的规则。

解决:更改排序集(collate)  由默认的utf8mb4_general_ci改为utf8mb4_bin 

alter table user_1 modify nickname nickname varchar(50) character set utf8mb4 collate utf8mb4_bin;

官网地址:MySQL :: MySQL Globalization :: 1.1 Character Sets and Collations in General

二、es中支持搜索emoji

常见分词器:

  • standard 标准分词器  : 默认的分词器      识别空格、email、中文
  • whitespace  空格分词器 :  只能对空格分词
  • keyword  分词器 :不分词,整体作为一个单词
  • ik  中文分词器 :第三方分词器,对中文支持较好     需要额外安装
  • pinyin  拼音分词器 :第三方分词器,支持拼音检索    需要额外安装
  • icu_analyzer icu分词器 :对中文支持较好,支持emoji,需要额外安装

问题:由于ik分词器不支持emoji表情,所以使用ik中文搜索时,无法根据表情和中文混合搜索。

解决

1、当搜索关键词中包含emoji,指定分词器走icu分词器(支持中文,又支持emoji);

2、关键词中不包含emoji时,走ik(纯中文还是它香)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值