13、设置默认字符集和校对规则
MySQL 服務器可以支持多種字符集,在同一臺服務器、同一個數據庫甚至同一個表的不同字段中,都可以使用不同的字符集。Oracle 等其它數據庫管理系統都只能使用相同的字符集,相比之下,MySQL 明顯存在更大的靈活性。
MySQL 的字符集和校對規則有 4 個級別的默認設置,
即服務器級、
數據庫級、
表級、
字段級。
它們分別在不同的地方設置,作用也不相同。
服務器字符集和校對規則
修改服務器默認字符集和校對規則的方法如下。
1)可以在 my.ini 配置文件中設置服務器字符集和校對規則,添加內容如下:
[mysqld] character-set-server=字符集名稱2)連接 MySQL 服務器時指定字符集:
mysql --default-character-set=字符集名稱 -h 主機IP地址 -u 用戶名 -p 密碼
如果沒有指定服務器字符集,MySQL 會默認使用 latin1 作為服務器字符集。
如果只指定了字符集,沒有指定校對規則,MySQL 會使用該字符集對應的默認校對規則。
如果要使用字符集的非默認校對規則,需要在指定字符集的同時指定校對規則。
可以用 SHOW VARIABLES LIKE 'character_set_server' 和 SHOW VARIABLES LIKE 'collation_server' 命令查詢當前服務器的字符集和校對規則。
mysql> SHOW VARIABLES LIKE 'character_set_server'; +----------------------+--------+ | Variable_name | Value | +----------------------+--------+ | character_set_server | gbk | +----------------------+--------+ 1 row in set, 1 warning (0.01 sec) mysql> SHOW VARIABLES LIKE 'collation_server'; +------------------+-------------------+ | Variable_name | Value | +------------------+-------------------+ | collation_server | gbk_chinese_ci | +------------------+-------------------+ 1 row in set, 1 warning (0.01 sec)數據庫字符集和校對規則
數據庫的字符集和校對規則在創建數據庫時指定,也可以在創建完數據庫后通過 ALTER DATABASE 命令進行修改。
設置數據庫字符集的規則如下:
- 如果指定了字符集和校對規則,則使用指定的字符集和校對規則;
- 如果指定了字符集沒有指定校對規則,則使用指定字符集的默認校對規則;
- 如果指定了校對規則但未指定字符集,則字符集使用與該校對規則關聯的字符集;
- 如果沒有指定字符集和校對規則,則使用服務器字符集和校對規則作為數據庫的字符集和校對規則。
為了避免受到默認值的影響,推薦在創建數據庫時指定字符集和校對規則。
可以使用 SHOW VARIABLES LIKE 'character_set_database' 和 SHOW VARIABLES LIKE 'collation_database' 命令查看當前數據庫的字符集和校對規則。
mysql> SHOW VARIABLES LIKE 'character_set_database'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | character_set_database | latin1 | +------------------------+--------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation_database'; +--------------------+-------------------+ | Variable_name | Value | +--------------------+-------------------+ | collation_database | latin1_swedish_ci | +--------------------+-------------------+ 1 row in set, 1 warning (0.00 sec)表字符集和校對規則
表的字符集和校對規則在創建表的時候指定,也可以在創建完表后通過 ALTER TABLE 命令進行修改,
同樣,如果表中已有記錄,修改字符集后,原有的記錄不會按照新的字符集重新存放。表的字段仍然使用原來的字符集。
設置表的字符集規則和設置數據庫字符集的規則基本類似:
- 如果指定了字符集和校對規則,使用指定的字符集和校對規則;
- 如果指定了字符集沒有指定校對規則,使用指定字符集的默認校對規則;
- 如果指定了校對規則但未指定字符集,則字符集使用與該校對規則關聯的字符集;
- 如果沒有指定字符集和校對規則,使用數據庫字符集和校對規則作為表的字符集和校對規則。
為了避免受到默認值的影響,推薦在創建表的時候指定字符集和校對規則。
可以使用 SHOW CREATE TABLE 命令查看當前表的字符集和校對規則,SQL 語句和運行結果如下:
mysql> SHOW CREATE TABLE tb_students_info \G *************************** 1. row ***************************Table: tb_students_info Create Table: CREATE TABLE `tb_students_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`height` float DEFAULT NULL,`course_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)列字符集和校對規則
MySQL 可以定義列級別的字符集和校對規則,主要是針對相同表的不同字段需要使用不同字符集的情況。一般遇到這種情況的幾率比較小,這只是 MySQL 提供給我們一個靈活設置的手段。
列字符集和校對規則的定義可以在創建表時指定,或者在修改表時調整。語法格式如下:
ALTER TABLE 表名 MODIFY 列名 數據類型 CHARACTER SET 字符集名;例 1
修改 tb_students_info 表中 name 列的字符集,并查看。SQL 語句和運行結果如下:
結果顯示,name 列字符集修改成功。
如果在創建列的時候沒有特別指定字符集和校對規則,默認使用表的字符集和校對規則。
連接字符集和校對規則
上面所講的 4 種設置方式,確定的都是數據保存的字符集和校對規則。實際應用中,還需要設置客戶端和服務器之間交互的字符集和校對規則。
對于客戶端和服務器的交互操作,MySQL 提供了 3 個不同的參數:character_set_client、character_set_connection 和 character_set_results,分別代表客戶端、連接和返回結果的字符集。通常情況下,這 3 個字符集是相同的,這樣可以確保正確讀出用戶寫入的數據,尤其是中文字符。字符集不同時,容易導致寫入的記錄不能正確讀出。
設置客戶端和服務器連接的字符集和校對規則有以下幾種方法:
1)在 my.ini 配置文件中,設置以下語句:
[mysql] default-character-set=gbk這樣服務器啟動后,所有連接默認使用 GBK 字符集進行連接。
2)可以通過以下命令來設置連接的字符集和校對規則,這個命令可以同時修改以上 3 個參數(character_set_client、character_set_connection 和 character_set_results)的值。
SET NAMES gbk;使用這個方法可以“臨時一次性地”修改客戶端和服務器連接時的字符集為 gbk。
3)MySQL 還提供了下列 MySQL 命令“臨時地”修改 MySQL“當前會話的”字符集和校對規則。
set character_set_client = gbk; set character_set_connection = gbk; set character_set_database = gbk; set character_set_results = gbk; set character_set_server = gbk; set collation_connection = gbk_chinese_ci; set collation_database = gbk_chinese_ci; set collation_server = gbk_chinese_ci;總結
以上是生活随笔為你收集整理的13、设置默认字符集和校对规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10、MySQL锁等待,死锁,死锁检测
- 下一篇: 14、修改字符集步骤详解