MySQL存储的字段是不区分大小写的,你知道吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL存储的字段是不区分大小写的,你知道吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3854字,纯文字阅读大概需要6分钟。
内容图文
使用 查询语句查询 username 为 全部小写的user
的用户,结果查询出这个三条记录全部都查询到了。
mysql> SELECT username from tb_user where username = ‘user‘;
+----------+
| username |
+----------+
| user |
| User |
| USER |
+----------+
3 rows in set
通过这个例子简单说明,字段内容默认情况下是大小写不敏感的。
02 解决方案
因为默认情况下字段内容是不区分大小写的,也即大小写不敏感。所以解决方案就是要新增字段内容的校验规则。
使用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 COMMENT ‘用户名‘,
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = ‘用户表‘;
mysql> show create table tb_user1;
tb_user1 | CREATE TABLE `tb_user1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘用户id‘,
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘用户名‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户表‘
1 row in set
或者 使用
CREATE TABLE `tb_user2` (
`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘用户id‘,
`username` VARCHAR (50) NOT NULL COMMENT ‘用户名‘,
`info` VARCHAR (100) NOT NULL COMMENT ‘详情描述‘,
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE=utf8_bin COMMENT = ‘用户表‘;
mysql> show create table tb_user2;
tb_user2 | CREATE TABLE `tb_user2` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘用户id‘,
`username` varchar(50) COLLATE utf8_bin NOT NULL COMMENT ‘用户名‘,
`info` varchar(100) COLLATE utf8_bin NOT NULL COMMENT ‘详情描述‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=‘用户表‘
使用 NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
会将字段中varchar类型的全部设置区分大小写。这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin
。
03 总结
字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以ci(大小写不敏感)、cs(大小写敏感)或_bin(二元)结束 。
比如 utf8字符集,,如下表:
1)utf8bin:utf8bin将字符串中的每一个字符用二进制数据存储,区分大小写。
2)utf8generalci:utf8generaci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
3)utf8generalcs:utf8generalcs区分大小写,cs为case sensitive的缩写,即大小写敏感。
注:我本机使用5.7 版本不支持 utf8generalcs 字符集,创建报错。
通过上一篇和这一篇的内容,详细大家对mysql对大小写敏感的问题也有一定的认识了,在实际的开发中,库和表名最好使用小写字母,注意字段存储内容的大写问题。并且让本地开发环境mysql的配置和服务器上mysql的配置保持一致,这样防止因为环境不一致而出现一些诡异问题。
你在开发中有没有遇到一些诡异的问题呢?欢迎留言分享。
04 参考资料
https://dev.mysql.com/doc/search/?d=12&p=1&q=binary
https://www.techonthenet.com/mysql/functions/binary.php
https://www.cnblogs.com/wzmenjoy/p/4244545.html
谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!
不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!
愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人
© 每天都在变得更好的阿飞云
MySQL存储的字段是不区分大小写的,你知道吗?
标签:区分大小写 size 忽略 alt 春暖花开 binary 内容 帮助 lda
本文系统来源:https://www.cnblogs.com/aflyun/p/11047737.html
内容总结
以上是互联网集市为您收集整理的MySQL存储的字段是不区分大小写的,你知道吗?全部内容,希望文章能够帮你解决MySQL存储的字段是不区分大小写的,你知道吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。