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;

 

2Mysql的默認配置:

如果沒有給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;

 本文由用戶 wangjianme 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!