mysql查询字段纯字母_解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题...

解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题

解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题

目录

1、使用场景

2、实现过程及展示结果

2.1、修改字段排序规则为utf8_bin

2.2 把字段 强制转换校对设置为utf8_bin

3、总结

4、参考文章

1、使用场景

最近接手海外项目,其中有个bug,因为业务数据字段支持多种语言(法文、英文、俄罗斯语言)等。于是在输入模糊搜索法文字母的时候无法。最后查找原因,应该是字段创建默认数据库时候默认使用排序字符集是(utf8_general_ci):

utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写;

utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感,为utf8默认编码。

如果使用默认规则就不区分大小写,因为我在以前开发其他一个项目 用户名要求区分大小写的,遇见类似问题。所以定位此问题关键就是字段的排序规则问题。

2、实现过程及展示结果

因为此bug其他同事修改过,没有解决问题。于是我也网搜索相关文章解决方案。给出的方案见参考文章链接《关于mysql如何精准的查询法文字母》,结合文章方案我总结如下两种解决方式:

如果是做国际版业务,建议字段排序规则都选择 utf8_bin

在不修改现有数据库的情况下,最为简洁办法 把字段 强制转换校对设置为utf8_bin

utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序

于是我分别试验以上两种方式:

2.1、修改字段排序规则为utf8_bin

e213c70f63d28e7674bc907ed104aae8.png

此时执行查询如下代码所示:

SELECT * FROM cos_course c WHERE c.name like concat('%','é','%');

bb1a72d2ed18c0da0904335c8d5f625b.png

2.2 把字段 强制转换校对设置为utf8_bin

6c3045ff76083bd9b5a7007e150340c8.png

此时执行查询如下代码所示:

SELECT * FROM cos_course c WHERE c.name COLLATE utf8_bin like concat('%','é','%');

ec4993e918366dd46180af622711348f.png

3、总结

此问题我的另外一个同事本来就修改过;但是没有找到问题的本质内容。实际上要么是字段变化为可以区分大小写两者比较,要么是数据库字段排序规则直接设置为区分大小写。

4、参考文章

mysql数据库编码格式utf8_general_ci、utf8_bin、utf8_general_cs

utf8mb4的大小写敏感性测试及其修改方法

关于mysql如何精准的查询法文字母

解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值