ef字段不区分⼤⼩写_MySQL存储的字段是不区分⼤⼩写
的,你知道吗?
做⼀个积极的⼈
编码、改bug、提升⾃⼰
我有⼀个乐园,⾯向编程,春暖花开!
00 简单回顾
之前写过⼀篇关于mysql 对表⼤⼩写敏感的问题,其实在mysql中字段存储的内容是不区分⼤⼩写的,本篇进⾏简单的总结。
想回顾⼀下:
MySQL在Linux下数据库名、表名、列名、别名⼤⼩写规则是这样的:
1、数据库名与表名是严格区分⼤⼩写的;
2、表的别名是严格区分⼤⼩写的;
3、列名与列的别名在所有的情况下均是忽略⼤⼩写的;
4、字段内容默认情况下是⼤⼩写不敏感的。
01 ⼀个例⼦
简单例⼦:
CREATE TABLE `tb_user` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '⽤户id', `username` VARCHAR (50) NOT NULL COMMEN 使⽤ 查询语句查询 username 为 全部⼩写的user 的⽤户,结果查询出这个三条记录全部都查询到了。
mysql> SELECT username from tb_user where username = 'user';+----------+| username |+----------+| user || User || USER |+----------+3 rows in set
通过这个例⼦简单说明,字段内容默认情况下是⼤⼩写不敏感的。
02 解决⽅案
mysql 要钱吗因为默认情况下字段内容是不区分⼤⼩写的,也即⼤⼩写不敏感。所以解决⽅案就是要新增字段内容的校验规则。
使⽤mysql 的BINARY 关键字使搜索区分⼤⼩写。
在查询的sql中加⼊BINARY 关键字
mysql> select * from tb_user where BINARY username ='user';+----+----------+| id | username |+----+----------+| 1 | user |+----+----------+1 row in set
这种⽅式相对较简单,不⽤改动表结构,只需在需要区分查询的字段前加上关键字。这种⽅式也是有缺点的,每次写查询的时候都要注意加
关键字,并可能需要改动的代码较多。
在创建表的时候进⾏限制
CREATE TABLE `tb_user1` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '⽤户id', `username` VARCHAR (50) BINARY NOT NULL C
或者 使⽤
CREATE TABLE `tb_user2` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '⽤户id', `username` VARCHAR (50) NOT NULL COMMEN
使⽤ NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin会将字段中varchar类型的全部设置区分⼤⼩写。这两种查看表
的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin。
03 总结
字段值的⼤⼩写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是⼀套符号和编码,校对规则是在字符集内⽤于⽐
较字符的⼀套规则。 ⼀般⽽⾔,校对规则以其相关的字符集名开始,通常包括⼀个语⾔名,并且以ci(⼤⼩写不敏感)、cs(⼤⼩写敏感)或
_bin(⼆元)结束 。
⽐如 utf8字符集,,如下表:
1)utf8bin:utf8bin将字符串中的每⼀个字符⽤⼆进制数据存储,区分⼤⼩写。
2)utf8general ci:utf8genera ci不区分⼤⼩写,ci为case insensitive的缩写,即⼤⼩写不敏感。
3)utf8general cs:utf8general cs区分⼤⼩写,cs为case sensitive的缩写,即⼤⼩写敏感。
注:我本机使⽤5.7 版本不⽀持 utf8general cs 字符集,创建报错。
通过上⼀篇和这⼀篇的内容,详细⼤家对mysql对⼤⼩写敏感的问题也有⼀定的认识了,在实际的开发中,库和表名最好使⽤⼩写字母,注
意字段存储内容的⼤写问题。并且让本地开发环境mysql的配置和服务器上mysql的配置保持⼀致,这样防⽌因为环境不⼀致⽽出现⼀些诡
异问题。
你在开发中有没有遇到⼀些诡异的问题呢?欢迎留⾔分享。
04 参考资料
谢谢你的阅读,如果您觉得这篇博⽂对你有帮助,请点赞或者喜欢,让更多的⼈看到!祝你每天开⼼愉快!
不管做什么,只要坚持下去就会看到不⼀样!在路上,不卑不亢!
愿你我在⼈⽣的路上能都变成最好的⾃⼰,能够成为⼀个独挡⼀⾯的⼈
© 每天都在变得更好的阿飞云
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论