1. 程式人生 > >mysql 字符集

mysql 字符集

fault 二進制 reat 們的 set var 服務 result 不支持

mysql支持使用不同的字符集存儲數據,支持四個級別的字符集設置:server、database、table 和 column。 MyISAM, MEMORY, and InnoDB 三個存儲引擎都支持不同的字符集設置。

本文參考:mysql 官網 http://www.mysql.com/

一、字符集和比對規則

字符集(character set):是一組符號和編碼

比對規則(collation):是一組字符比對的規則

舉例:

假設 A=0 , B=1 ,a=2, b=3。那麽其中A 就是一個符號,0就是一個編碼。 4個字母和他們編碼的總和被稱為字符集。

1.如果我們想要比較字符 A 和 B的大小,那麽我們使用他們的編碼 0 和 1 進行比較,得A<B。

這種比對規則 只包含了一種規則(編碼的比較),我們稱之為二進制比對規則。

2.如果我們不區分大小寫,那麽A 是=a的。

這種比對規則包含了兩種規則,1)大小寫字母相等。 2)比較編碼。我們稱之為大小寫敏感的比對規則

但是,在實際生活中,字符集都包含大量的字母和符號。比對規則也包含眾多的規則。

mysql可以做什麽呢?

1)使用不同的字符集來存儲字符。

2)使用不同的比對規則來進行字符的比較。

3)在同一臺服務器、數據庫甚至數據表中,混合使用不同的字符集。

二、mysql 中支持的字符集和比對規則

安裝好mysql server之後,可以通過兩種方式來查看其支持的character sets 和 collation。

1)查看系統表:INFOMATION_SCHEMA CHARACTER_SETS

2)使用命令:SHOW CHARACTER_SET (可跟 like where 條件表達式)

一套字符集可能會使用多種比對規則,查看方法如下:

1)查看系統表:INFOMATION_SCHEMA COLLATIONS

2)使用命令:SHOW COLLATION (可跟 like where 條件表達式)

三、在mysql中指定字符集和比對規則

Server character set 和 collation-server(服務器級別的字符集)
1.啟動服務時指定
Mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci
2.配置文件指定
[mysqld]
character-set-server=latin1
collation-server=latin1_swedish_ci

Database character set 和 collation (數據庫級別)
1.創建時
Create database db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]

2.修改時
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
註:所有的database options 都保存在database文件的 db.opt 文本文件中

查看當前數據庫設置的字符集信息

USE db_name;
SELECT @@character_set_database, @@collation_database;

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ‘db_name‘;

Table character set 和 collation (表級別)

同database level

CREATE TABLE tbl_name (column_list)

[[DEFAULT] CHARACTER SET charset_name]

[COLLATE collation_name]]

ALTER TABLE tbl_name

[[DEFAULT] CHARACTER SET charset_name]

[COLLATE collation_name]

Column character set 和 collation (列級別)

col_name {CHAR | VARCHAR | TEXT} (col_length)

[CHARACTER SET charset_name]

[COLLATE collation_name]

Examples:

CREATE TABLE t1

(

col1 VARCHAR(5)

CHARACTER SET latin1

COLLATE latin1_german1_ci

);

ALTER TABLE t1 MODIFY

col1 VARCHAR(5)

CHARACTER SET latin1

COLLATE latin1_swedish_ci;

字符串的 character 和 collation (普通字符串級別)

Select ‘string’ 使用的是character_set_connection 指定的字符集

字符 的 字符集指定語法

[_charset_name]‘string‘ [COLLATE collation_name]

Examples:

SELECT ‘abc‘;

SELECT _latin1‘abc‘;

SELECT _binary‘abc‘;

SELECT _utf8‘abc‘ COLLATE utf8_danish_ci;

四、client-server 程序交互涉及到的字符集和比對規則

數據最終的存儲編碼

1.系統變量Character_set_server和 collation_server 設置服務器程序的字符集及比對順序

1.系統變量character_set_database和collation_database 標識了數據庫默認的字符集

Client 和 server 進行信息交互所使用的編碼

1.系統變量character_set_client標識了客戶端程序發送到服務端程序所使用的字符集

2.Server使用 character_set_connection 和collation_connection 標識的字符集來翻譯來自client的sql 命令

3.Character_set_results:server返回執行結果所使用的編碼

Client 程序所使用的字符編碼

註:默認使用OS上的默認編碼。若、mysql不支持OS默認編碼,則使用mysql默認編碼latin1

編碼修改方法:

1. client 啟動時,增加選項 --default-character-set=char-name

2. 配置文件my.ini中指定

[mysql]

Default-character-set=char-name

註:此時c-s交互編碼會自動被設置為 以上編碼

mysql 字符集