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...