【精选】mysql查询全角半角问题 |
您所在的位置:网站首页 › mysql转中文 › 【精选】mysql查询全角半角问题 |
问题背景:
因为项目中某些需求,需要根据企业名称查询企业信息,但是企业输入名称和实际名称可能会有括号的全角半角问题,比如:自家系统中某企业名称“百度在线网络技术(北京)有限公司”,但是手动输入的名称是“百度在线网络技术(北京)有限公司”,这时候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 |