MySQL字段内容默认情况下是大小写不敏感的,你知道吗? |
您所在的位置:网站首页 › 默认字符集是什么意思 › MySQL字段内容默认情况下是大小写不敏感的,你知道吗? |
MySQL存储的字段是不区分大小写的,你知道吗?
解决方案1.在查询的sql中加入 **`BINARY`** 关键字2.在创建表的时候进行限制
总结
之前写过一篇关于mysql 对表大小写敏感的问题,其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。 想回顾一下: MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: 1、数据库名与表名是严格区分大小写的; 2、表的别名是严格区分大小写的; 3、列名与列的别名在所有的情况下均是忽略大小写的; 4、字段内容默认情况下是大小写不敏感的。 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通过这个例子简单说明 字段内容默认情况下是大小写不敏感 的。 解决方案 1.在查询的sql中加入 BINARY 关键字select * from tb_user where BINARY username =‘user’; mysql> select * from tb_user where BINARY username ='user'; +----+----------+ | id | username | +----+----------+ | 1 | user | +----+----------+ 1 row in set这种方式相对较简单,不用改动表结构,只需在需要区分查询的字段前加上关键字。这种方式也是有缺点的,每次写查询的时候都要注意加关键字,并可能需要改动的代码较多。 2.在创建表的时候进行限制 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。 总结字段值的大小写由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的缩写,即大小写敏感。 原文:https://www.php.cn/mysql-tutorials-423335.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |