天天看點

修改 mysql 字元集_如何修改MySQL字元集

匿名使用者

1級

2017-02-25 回答

首先,MySQL的字元集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字元内容

及編碼,後者是對前者進行比較操作的一些規則。這兩個參數集可以在資料庫執行個體、單個資料庫、表、列等四個級

别指定。

對于使用者來說,一般推薦使用utf8編碼來存儲資料。而要解決亂碼問題,不單單是MySQL資料的存儲問題,還

和使用者的程式檔案的編碼方式、使用者程式和MySQL資料庫的連接配接方式都有關系。

首先,MySQL有預設的字元集,這個是安裝的時候确定的,在編譯MySQL的時候可以通過DEFAULT_CHARSET=

utf8和DEFAULT_COLLATION=utf8_general_ci這兩個參數(MySQL5.5版本,5.1版本用--with-charset=

utf8 --with-collation=utf8_general_ci)來指定預設的字元集為utf8,這也是最一勞永逸的辦法,這樣指定後,

用戶端連接配接到資料庫的編碼方式也預設是utf8了,應用程式不需要任何處理。

但是遺憾的是,很多人編譯安裝MySQL的時候沒有指定這兩個參數,大多數人更是通過二進制程式的方式安裝,那

麼這時候MySQL的預設字元集是latin1。而這時候我們仍然可以指定MySQL的預設字元集,通過my.cnf檔案增加

兩個參數:

1.在[mysqld]下添加

default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)

2.在[client]下添加

default-character-set=utf8

這樣我們建資料庫建表的時候就不用特别指定utf8的字元集了。配置檔案裡的這種寫法解決了資料存儲和比較的問題

,但是對用戶端的連接配接是沒有作用的,用戶端這時候一般需要指定utf8方式連接配接才能避免亂碼。也就是傳說總的set

names指令。事實上,set names utf8指令對應的是伺服器端以下幾個指令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = xutf8;

但這三個參數是不能寫在配置檔案my.cnf裡的。隻能通過set指令來動态修改。我們需要的是在配置檔案裡寫好一勞

永逸的辦法。那麼這時候,是否有在服務端解決問題的辦法呢,可行的思路是在init_connect裡設定。這個指令在每

個普通使用者連接配接上來的時候都會觸發執行,可以在[mysqld]部分增加以下一行設定連接配接字元集:

在[mysqld]下添加:

init_connect = 'SET NAMES utf8'

總結:

1、首選在編譯安裝MySQL的時候指定兩個參數使用utf8編碼。

2、次選在配置檔案my.cnf或my.ini設定兩個參數,同時設定init_connect參數。

3、第三在配置檔案my.cnf或my.ini設定兩個參數,同時用戶端的連接配接指定set names指令。

4、在配置檔案my.cnf裡的client和server處加入default-character-set參數友善管理。