Mysql的字符編碼問題
Mysql的字符編碼問題
使用mysql總是經常被亂碼所困擾,以下就簡單說一下,mysql是如何管理字符編碼的。
Mysql管理字符編碼,使用三個不同的等級,分別為:
客戶端(character_set_client) :即客戶端,將以什么編碼形式準備數據。
服務器(character_set_server):即服務器,將以什么編碼形式保存數據。
連接器(character_set_connection):即客戶端與服務器之間進行通信時,以什么編碼方式進行通信。
Mysql對于每一個數據庫,每一個表,每一個字段都可以單獨設置字符編碼格式。我個人認為。沒有必須設置的那么細。只要編碼格式可以精確到數據庫,就足可以滿足開發的需要。一般情況下,將數據庫的編碼格式設置成UTF8。
1、一些查看命令如下:
show variables; //顯示客戶端(當前)與服務器的所有變量設置信息。
(圖略)
Show variables like ‘character%’; //只顯示編碼信息
此處可見,客戶端、連接都是utf-8編碼。
而數據庫則為ISO-8859-1,
服務器也是ISO-8859-1。
為了保證不出現亂碼,對于中文環境一般設置客戶端環境為GBK,并與結果數據result設置的編碼相同。數據庫為UTF-8。
在命令行,設置編碼格式:
Shell/> set character_set_client=utf8;
2、Mysql的默認配置:
如果沒有給mysql配置字符集,mysql將選擇默認配置。默認的配置從何而來呢?
(1)編譯MySQL 時,指定了一個默認的字符集,這個字符集是 latin1;
(2)安裝MySQL 時,可以在配置文件 (my.ini) 中指定一個默認的的字符集,如果沒指定,這個值繼
承自編譯時指定的;
(3)啟動mysqld 時,可以在命令行參數中指定一個默認的的字符集,如果沒指定,這個值繼承自配置
文件中的配置,此時 character_set_server 被設定為這個默認的字符集;
(4)當創建一個新的數據庫時,除非明確指定,這個數據庫的字符集被缺省設定為
character_set_server;
(5)當選定了一個數據庫時,character_set_database被設定為這個數據庫默認的字符集;
(6)在這個數據庫里創建一張表時,表默認的字符集被設定為 character_set_database,也就是這個
數據庫默認的字符集;
(7)當在表內設置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認的字符集;
簡單的總結一下,如果什么地方都不修改,那么所有的數據庫的所有表的所有欄位的都用 latin1 存儲,
不過我們如果安裝 MySQL,一般都會選擇多語言支持,也就是說,安裝程序會自動在配置文件中把
default_character_set 設置為 UTF-8,這保證了缺省情況下,所有的數據庫的所有表的所有欄位的都用
UTF-8 存儲。
3、一些有用的命令
/*顯示所有系統變量的設置*/
SHOW VARIABLES;
/*顯示所有以character開頭的環境設置*/
SHOW VARIABLES LIKE 'character%';
/*功能同上*/
SHOW VARIABLES WHERE VARIABLE_Name LIKE 'character%';
/*顯示當前數據庫的編碼格式*/
SHOW VARIABLES WHERE VARIABLE_NAME= 'character_set_database';
/*使用全局變量查詢,功能同上*/
SELECT @@character_set_database;
/*設置自增量從1開始。默認就是從1開始*/
SET AUTO_INCREMENT_increment=1;
/*設置自增量每次增加2*/
SET AUTO_INCREMENT_offset=2;