MySQL系列:utf8_bin和utf8_general_ci編碼的區別


MySQL中存在多種格式的utf8編碼,其中最常見的兩種為:

  1. utf8_bin
  2. utf8_general_ci

utf8_bin將字符串中的每一個字符用二進制數據存儲,區分大小寫;
utf8_genera_ci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感,為utf8默認編碼。

示例:

 1 CREATE TABLE `t_bin` (
 2 `id` int(11) DEFAULT NULL,
 3 `name` varchar(20) DEFAULT NULL,
 4 UNIQUE KEY `uk_name` (`name`)
 5 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 6 
 7 CREATE TABLE `t_ci` (
 8 `id` int(11) DEFAULT NULL,
 9 `name` varchar(20) DEFAULT NULL,
10 UNIQUE KEY `uk_name` (`name`)
11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
12 
13 CREATE TABLE `t_default` (
14 `id` int(11) DEFAULT NULL,
15 `name` varchar(20) DEFAULT NULL,
16 UNIQUE KEY `uk_name` (`name`)
17 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

執行以下語句:

1 insert into t_bin values (1, 'Alex');
2 insert into t_bin values (2, 'alex');
3 
4 insert into t_ci values (1, 'Alex');
5 insert into t_ci values (2, 'alex');
6 
7 insert into t_default values (1, 'Alex');
8 insert into t_default values (2, 'alex');

結果如下:

 1 root@zow 11:13:44>insert into t_bin values (1, 'Alex');
 2 Query OK, 1 row affected (0.01 sec)
 3 
 4 root@zow 11:14:14>insert into t_bin values (2, 'alex');
 5 Query OK, 1 row affected (0.01 sec)
 6 
 7 root@zow 11:14:17>insert into t_ci values (1, 'Alex');
 8 Query OK, 1 row affected (0.00 sec)
 9 
10 root@zow 11:14:32>insert into t_ci values (2, 'alex');
11 ERROR 1062 (23000): Duplicate entry 'alex' for key 'uk_name'
12 root@zow 11:14:36>insert into t_default values (1, 'Alex');
13 Query OK, 1 row affected (0.01 sec)
14 
15 root@zow 11:14:50>insert into t_default values (2, 'alex');
16 ERROR 1062 (23000): Duplicate entry 'alex' for key 'uk_name'

分析:

編碼為utf8_bin時,Alex和alex被認為是兩個不同的值,區分大小寫;

編碼為utf8_general_ci時,即默認的編碼時,Alex和alex被認為是相同的值,不區分大小寫。

 

所以在選擇編碼的時候應該注意區分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM