【勝通 】mysql字符集與校驗規則的設定

idba發表於2008-07-09

預設情況下,我們可以在4個級別分別設定mysql的字符集和校驗規則,分別是server、database、table和column。實際上,我們甚至還可以單獨對一串字串設定其字符集和校驗規則。下面就分別來對四個級別的設定說明一下:

server:
在啟動mysql服務的時候,可以指定mysql server的字符集和校驗規則,通過如下方式:
mysqld –character-set-server=latin1 –collation-server=latin1_swedish_ci
如果不親自指定它們,那麼mysql就會使用預設值。一般是latin1和latin1_swedish_ci。當然這個預設值是可以修改的,但是方法只有一種,那就是重編譯原始碼。採用如下方式:
./configure –with-charset=gbk –with-collation=gbk_bin

如何查詢當前的server的字符集和校驗規則的值,可以檢視系統引數character_set_server和collation_server:

mysql> show variables like 'character_set_server%';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_server%';
+------------------+-------------------+
| Variable_name    | Value             |
+------------------+-------------------+
| collation_server | latin1_swedish_ci |
+------------------+-------------------+
1 row in set (0.00 sec)

server的字符集和校驗規則的唯一作用就是,當database的字符集和校驗規則沒有指定的時候,就預設使用server的對應值。

database:
我們在建立和修改資料庫的時候,可以指定其字符集和校驗規則:

CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name];
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name];

對應檢視當前資料庫的字符集和校驗規則的系統引數是’character_set_database’和’collation_database’,如下:

mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | gbk   |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_database';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| collation_database | gbk_bin |
+--------------------+---------+
1 row in set (0.00 sec)

資料庫的字符集和校驗規則的作用有二,其一是當沒有在表級別知道它們,那麼預設就使用資料庫基本的值;其二是在“load data infile”時也起到了作用。

table:
在建立表或者修改表結構的時候,我們可以通過如下方式指定這個表的字符集和校驗規則:

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:
具體的表的具體的某個欄位,我們也可以指定其字符集和校驗規則,如下:

col_name {CHAR | VARCHAR | TEXT} (col_length)
[CHARACTER SET charset_name] [COLLATE collation_name]

那麼,這四個級別的字符集和校驗規則的指定(級別高低server>database>table>column),mysql最終以何種形式來儲存和顯示字串的呢?

1、本級別中,如果同時指定character set和collate,那麼就使用指定的值;
2、本級別中,只指定character set而沒有指定collate,那麼就使用指定的character set值和其對應的預設的collation值;
3、本級別中,只指定collate而沒有指定character set,那麼就使用指定的collation值和其所對應的character set值;
4、本級別中,都沒有指定這2個值,那麼預設就使用上一級別的對應的值。

國家字符集:
mysql中國家字符集的概念,其表示使用預先定義的字符集,在mysql5.1中使用utf8作為其預先的定義的字符集。
因此,下面幾種型別的定義,其實是等效的:

CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)

下面幾種型別也是等效的:

VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)

字串的字符集和校驗規則的設定問題,請稍等!

http://rdc.taobao.com/blog/dba/html/181_mysql_charset_collation_set.html/trackback

<!--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-374816/,如需轉載,請註明出處,否則將追究法律責任。

相關文章