【精选】mysql查询全角半角问题

您所在的位置:网站首页 mysql转中文 【精选】mysql查询全角半角问题

【精选】mysql查询全角半角问题

2023-11-18 10:29| 来源: 网络整理| 查看: 265

问题背景:

因为项目中某些需求,需要根据企业名称查询企业信息,但是企业输入名称和实际名称可能会有括号的全角半角问题,比如:自家系统中某企业名称“百度在线网络技术(北京)有限公司”,但是手动输入的名称是“百度在线网络技术(北京)有限公司”,这时候mysql查询不出来,怎么办?

解决方法1:

在查询sql中做特殊处理:

select * from company where replace(replace(replace(replace(name, '(', ''),')',''),'(',''),')','') = #{name}

或者

select * from company where replace(replace(replace(replace(name, '(', ''),')',''),'(',''),')','') = 

replace(replace(replace(replace(#{name}, '(', ''),')',''),'(',''),')','')

这种可以解决,但是速度慢

解决方法2(网上查的,不大好使):

SQL查询语句区分大小写、全角半角。。。。。

_CI_AI   不区分大小写、不区分重音、不区分假名类型、不区分宽度

_CI_AI_WS   不区分大小写、不区分重音、不区分假名类型、区分宽度

_CI_AI_KS   不区分大小写、不区分重音、区分假名类型、不区分宽度

_CI_AI_KS_WS   不区分大小写、不区分重音、区分假名类型、区分宽度

_CI_AS   不区分大小写、区分重音、不区分假名类型、不区分宽度

_CI_AS_WS   不区分大小写、区分重音、   不区分假名类型、区分宽度

_CI_AS_KS   不区分大小写、区分重音、区分假名类型、不区分宽度

_CI_AS_KS_WS   不区分大小写、区分重音、区分假名类型、区分宽度

_CS_AI   区分大小写、不区分重音、   不区分假名类型、不区分宽度

_CS_AI_WS   区分大小写、不区分重音、不区分假名类型、区分宽度

_CS_AI_KS   区分大小写、不区分重音、区分假名类型、不区分宽度

_CS_AI_KS_WS   区分大小写、不区分重音、区分假名类型、区分宽度

_CS_AS   区分大小写、区分重音、不区分假名类型、不区分宽度

_CS_AS_WS   区分大小写、区分重音、不区分假名类型、区分宽度

_CS_AS_KS   区分大小写、区分重音、区分假名类型、不区分宽度

_CS_AS_KS_WS   区分大小写、区分重音、区分假名类型、区分宽度

使用方法:

create table ta(id int ,name varchar(20))

insert ta

select 1, 'A' union all             ---大写A

select 2, 'A'union all            ---全角大写A

select 3, 'a,' union allselect 4, 'A,'

go

select * from ta where name like 'A%'--所有记录都会在结果集

select * from ta where name collate Chinese_PRC_CS_AS_WS like '%,%'--只有第4条记录满足

select * from ta where name collate Chinese_PRC_CS_AS_WS like 'a%'--第3条记录满足(加_ws与上一方法结果相同)

select * from ta where name collate Chinese_PRC_CS_AS_WS like 'A%'--第2条记录满足

select * from ta where name collate Chinese_PRC_BIN like'A'--第1条记录满足(用二进制排序结果同上相同)

链接(很多一样的,只是随便贴一个):

mysql查询时不区分全半角_SQL查询语句区分大小写、全角半角_天地玄黃的博客-CSDN博客

解决方法3(感觉挺好使):

修改字段的collation

语句是:

ALTER TABLE company MODIFY COLUMN name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

原来的默认是utf8mb4_general_ci,修改为utf8mb4_unicode_ci;

utf8mb4_unicode_ci和utf8mb4_general_ci的对比:

准确性: utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。性能 utf8mb4_general_ci在比较和排序的时候更快utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

 相关链接:

MySQL查看、修改字符集及Collation - 程序玩家 - 博客园

mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci - AmyZYX - 博客园



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3