首页 > 技术分享 > MySQL
收藏

mysql区不区分大小的相关问题

03/22 17:24
大潇博客 原创文章,转载请标明出处

MySQL区不区分大小写,取决于创建数据库时选择的字符集编码方式,主要有 _bin、_ci、_cs 三种


比如mysql中 utf8_bin 、utf8_general_ci 、utf8_general_cs 的区别

bin 是二进制,字符串每个字符用二进制数据编译存储,“a”和“A”会被区别对待;

所以 utf8_bin 区分大小写,而且可以存二进制的;


ci即:case insensitive,翻译为中文就是:不区分大小写,这种情况“a”和“A”在字符判断中会被当成是一样的;

所以 utf8_general_ci 不区分大小写,注册用户名和邮箱的时候推荐使用;


utf8_general_cs 区分大小写,如果用户名和邮箱用这个,易造成不良后果;


已有数据的解决方法:

MySQL字符串类型:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

重点说 BINARY、VARBINARY:

它们存储的不是字符字符串,而是二进制串。所以它们没有字符集,并且排序和比较基于列值字节的数值值


所以对于不区分大小写的字段,查询时想区分大小写,在field_name 前添加 binary 关键字即可

SELECT * FROM table_name WHERE binary field_name LIKE 'a%';


还有一种情况,比如已经创建的表,使用了区分大小写的“utf8_bin”,通过更换表或某个字段为“utf8_general_ci”,并不能有效的使查询不区分大小写

若表的数据量方便导出导入,推荐把数据库或数据表导出,在编辑器中统一将“utf8_bin”更换为“utf8_general_ci”,再次导入,此方法经测试有效。


其它:

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。


utf8_general_ci校对速度快,但准确度稍差。


utf8_unicode_ci准确度高,但校对速度稍慢。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311