[MySQL] 字符集和排序方式
MySQL的字符串分為兩大類:
1)二進制字符串:即一串字節序列,對字節的解釋不涉及字符集,因此它沒有字符集和排序方式的概念
2)非二進制字符串:由字符構成的序列,字符集用來解釋字符串的內容,排序方式決定字符的大小
字符集和排序方式
字符集和排序方式的關系是這樣的:一個字符集可以有一個或多個排序方式,有一個默認的排序方式,我們可以通過以下例子說明:
[sql] mysql> show character set like '%gbk%'; +---------+------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+------------------------+-------------------+--------+ | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | +---------+------------------------+-------------------+--------+ 1 row in set (0.00 sec) mysql> show collation like '%gbk%'; +----------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------+---------+----+---------+----------+---------+ | gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | | gbk_bin | gbk | 87 | | Yes | 1 | +----------------+---------+----+---------+----------+---------+ 2 rows in set (0.00 sec)
從上例中我們可以看出字符集gbk有兩個排序方式(分別為gbk_chinese_ci何gbk_bin),其中默認的排序方式為gbk_chinese_ci。
排序方式的命名規則為:字符集名字_語言_后綴,其中各個典型后綴的含義如下:
1)_ci:不區分大小寫的排序方式
2)_cs:區分大小寫的排序方式
3)_bin:二進制排序方式,大小比較將根據字符編碼,不涉及人類語言,因此_bin的排序方式不包含人類語言
因此,gbk_chinese_ci排序方式就表示:字符集為gbk,人類語言使用中文來比較大小,比較時區分大小寫。
常用函數
字符集引導
字符集引導可以讓MySQL指定一種字符集來解釋字符常量,其語法為:
_charset str
如:
_utf8 'ABCD' 表示以utf8字符集來介紹字符串常量'ABCD'
字符集轉換
convert()函數可以把一個字符串轉換成指定字符集,其語法為:
convert(str using charset)
如 convert('ABCD' using utf8) 表示把'ABCD'的字符集轉換成uft8
length()函數 --返回字節的長度
char_length() --返回字符長度
與字符集有關的系統變量
通過以下語句可以查看與字符集有關的系統變量:
[sql] mysql> show variables like 'character/_set/_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | gbk | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | gbk | | character_set_system | utf8 | +--------------------------+--------+ 7 rows in set (0.01 sec) mysql> show variables like 'collation/_%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | gbk_chinese_ci | | collation_server | gbk_chinese_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec)
它們的含義如下:
character_set_system:MySQL數據庫標識符使用的字符集,永遠是utf8
character_set_server和collation_server:服務器的默認字符集和排序方式
character_set_database和collation_database:當前數據庫的默認字符集和排序方式
以下三個變量將影響客戶端和服務器之間的通信:
character_set_client:客戶端向服務器發送SQL語句使用的字符集
character_set_results:服務器向客戶端返回結果時使用的字符集
character_set_connection:如果它和character_set_client不同,從客戶端發來的SQL語句將轉換為它指定的字符集
默認情況下,上述三個變量都設為為相同的值,如果某個客戶端想使用另一種字符集與服務器通信,可以修改它們,如:
[sql] set character_set_client = utf8; set character_set_results = utf8; set character_set_connection = utf8;
或者,更簡單的方法是使用如下一條語句也能達到相同的效果:
[sql] set names 'utf8';
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com