MySQL儲存的字段是不區分大小寫的,你知道嗎?

2021-10-08 20:31:30 字數 3604 閱讀 2394

mysql在windows下對錶名的大小寫不敏感但是在linux下對錶名的大小寫是敏感的,而對於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

通過這個例子簡單說明,字段內容預設情況下是大小寫不敏感的。

因為預設情況下 「字段內容」 不區分大小寫(大小寫不敏感),所以解決方案就是要新增字段內容的校驗規則:用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

字段值的大小寫由mysql的校對規則來控制。提到校對規則,就不得不說字符集。字符集是一套符號和編碼,校對規則是在字符集內用於比較字元的一套規則。 一般而言,校對規則以其相關的字符集名開始,通常包括乙個語言名,並且以ci(大小寫不敏感)、cs(大小寫敏感)或_bin(二元)結束 。

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

1)utf8bin:utf8bin將字串中的每乙個字元用二進位制資料儲存,區分大小寫。

2)utf8generalci:utf8generaci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感。

3)utf8generalcs:utf8generalcs區分大小寫,cs為case sensitive的縮寫,即大小寫敏感。

注:我本機使用5.7 版本不支援 utf8generalcs 字符集,建立報錯。

mysql的like查詢預設是不區分大小寫的

mysql的like查詢預設是不區分大小寫的 如 select from table name where a like a select from table name where a like a 效果是一樣的。要讓mysql的like查詢區分大小寫,可以這樣 select from table...

Mysql查詢語句中字元型字段不區分大小寫解決方法

專案中和前端聯調的時候,發現mysql查詢語句中字元型字段值過濾是不區分大小寫的,之前沒有關注過這個設定,特意去網上看了下,原因是mysql中 collate 屬性區分大小寫,而該屬性預設值為 utf8 general ci 這個值表示是不區分大小寫的。現將解決方法記錄如下 1.設定 collate...

Ubuntu中mysql設定表名不區分大小寫

最近在公司優化乙個android專案,服務端已經部署到正式環境中,不能直接在正式環境中測試,需要部署一套測試的環境,後台又比較忙,於是自己來了,在ubuntu上安裝好jdk,tomcat和mysql後,準備開始部署啦。發現乙個問題,通過hibernate自動生成的有些表的名字全部變成了大寫,而在wi...