默認情況下,我們可以在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://blogread.cn/it/article/96