在MySQL的使用過程中,了解字符集、字符序的概念,以及不同設置對數據存儲、比較的影響非常重要。不少同學在日常工作中遇到的“亂碼”問題,很有可能就是因為對字符集與字符序的理解不到位、設置錯誤造成的。
本文由淺入深,分別介紹了如下內容:
在數據的存儲上,MySQL提供了不同的字符集支持。而在數據的對比操作上,則提供了不同的字符序支持。
MySQL提供了不同級別的設置,包括server級、database級、table級、column級,可以提供非常精準的設置。
什么是字符集、字符序?簡單的來說:
舉個例子:
有四個字符:A、B、a、b,這四個字符的編碼分別是A = 0, B = 1, a = 2, b = 3。這里的字符 + 編碼就構成了字符集(character set)。
如果我們想比較兩個字符的大小呢?比如A、B,或者a、b,最直觀的比較方式是采用它們的編碼,比如因為0 < 1,所以 A < B。
另外,對于A、a,雖然它們編碼不同,但我們覺得大小寫字符應該是相等的,也就是說 A == a。
這上面定義了兩條比較規則,這些比較規則的集合就是collation。
MySQL支持多種字符集 與 字符序。
上面說的比較抽象,我們看下后面幾個小節就知道怎么回事了。
1、查看支持的字符集
可以通過以下方式查看MYSQL支持的字符集。
方式一:
| mysql> SHOW CHARACTER SET;+----------+-----------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+-----------------------------+---------------------+--------+| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 || dec8 | DEC West European | dec8_swedish_ci | 1 |...省略 |
方式二:
| mysql> use information_schema;mysql> select * from CHARACTER_SETS;+--------------------+----------------------+-----------------------------+--------+| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION | MAXLEN |+--------------------+----------------------+-----------------------------+--------+| big5 | big5_chinese_ci | Big5 Traditional Chinese | 2 || dec8 | dec8_swedish_ci | DEC West European | 1 |...省略 |