91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL存儲的字段為什么是不區分大小寫的

發布時間:2020-06-01 16:59:37 來源:PHP中文網 閱讀:349 作者:三月 欄目:MySQL數據庫

下面一起來了解下MySQL存儲的字段為什么是不區分大小寫的,相信大家看完肯定會受益匪淺,文字在精不在多,希望MySQL存儲的字段為什么是不區分大小寫的這篇短內容是你想要的。

                                                          MySQL存儲的字段為什么是不區分大小寫的

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存儲的字段為什么是不區分大小寫的這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿图什市| 通州市| 赞皇县| 普安县| 嵊泗县| 贺兰县| 庆元县| 清涧县| 阜宁县| 潮州市| 牡丹江市| 榆中县| 怀化市| 深水埗区| 丁青县| 台东县| 佳木斯市| 东兴市| 藁城市| 三河市| 吉林省| 张家港市| 太仓市| 中方县| 沅陵县| 镇平县| 武平县| 蒙城县| 东光县| 永善县| 长葛市| 和林格尔县| 巴中市| 嘉荫县| 精河县| 河池市| 苏尼特右旗| 维西| 黄冈市| 堆龙德庆县| 贵溪市|