• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL存储的字段是不区分大小写的,你知道吗?

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论
文章目录[隐藏]

00 简单回顾

之前写过一篇关于mysql 对表大小写敏感的问题,其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。

想回顾一下:

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、字段内容默认情况下是大小写不敏感的。

01 一个例子

简单例子:

CREATE TABLE `tb_user` (	`id` BIGINT (20) UNSIGNED NO<i style="color:transparent">本文来源gaodai$ma#com搞$代*码*网(</i>T NULL AUTO_INCREMENT COMMENT '用户id',	`username` VARCHAR (50) NOT NULL COMMENT '用户名',	PRIMARY KEY (`id`)) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表';INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('1', 'user');INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('2', 'User');INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('3', 'USER');

使用 查询语句查询 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='用户表'

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL存储的字段是不区分大小写的,你知道吗?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址