百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL存储的字段是不区分大小写的,你晓得吗?
分享文章到:

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

发布时间:09/01 来源:未知 浏览: 关键词:
MySQL在Linux下数据库名、表名、列名、又名大小写法则是这样的:1、数据库名与表名是严厉区分大小写的;2、表的又名是严厉区分大小写的;3、列名与列的又名在所有的状况下均是忽略大小写的;4、字段内容默许状况下是大小写不敏锐的。

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 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='会员表'

运用 NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin会将字段中varchar类型的全部设定区分大小写。这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin

03 总结

字段值的大小写由mysql的校对法则来控制。提到校对法则,就不得不说字符集。字符集是一套符号和编码,校对法则是在字符集内用于比拼字符的一套法则。 个别而言,校对法则以其相干的字符集名开端,平常包含一个说话名,而且以_ci(大小写不敏锐)、_cs(大小写敏锐)或_bin(二元)完毕 。

比方 utf8字符集,,如下表:

1)utf8_bin:utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。

2)utf8_general_ci:utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏锐。

3)utf8_general_cs:utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏锐。

注:我本机运用5.7 版本不支撑 utf8_general_cs 字符集,新建报错。

通过上一篇和这一篇的内容,细致大家对mysql对大小写敏锐的题目也有一定的相识了,在现实的开发中,库和表名最佳运用小写字母,注意字段存储内容的大写题目。而且让当地开发环境mysql的配置和办事器上mysql的配置维持一致,这样防止由于环境纷歧致而涌现一些诡异题目。

你在开发中有没有碰到一些诡异的题目呢?欢送留言分享。

更多MySQL相干技术文章,请拜访MySQL教程栏目进行学习!

以上就是MySQL存储的字段是不区分大小写的,你晓得吗?的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有155人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板