mysql 默認字符集概述
首先,MySQL的字符集問題主要是兩個概念:
- haracter Sets
- Collations
前者是字符內容及編碼,后者是對前者進行比較操作的一些規則。這兩個參數集可以在數據庫實例、單個數據庫、表、列等四個級別指定。
對於使用者來說,一般推薦使用utf8編碼來存儲數據
。而要解決亂碼問題,不單單是MySQL數據的存儲
,還和用戶程序文件的編碼方式
、用戶程序和MySQL數據庫的連接方式
都有關系。
服務端
編譯安裝Mysql時可以指定默認字符集 -- 將編碼問題扼殺在搖籃里
MySQL有默認的字符集,這個是安裝的時候確定的,在編譯MySQL的時候可以通過這兩個參數來指定默認的字符集為utf8
在MySQL5.5版本中
DEFAULT_CHARSET=utf8
DEFAULT_COLLATION=utf8_general_ci
在mysql5.1版本中
--with-charset=utf8
--with-collation=utf8_general_ci
這樣指定后,客戶端連接到數據庫的編碼方式也默認是utf8了,應用程序不需要任何處理。
二進制安裝后修改默認字符集 -- 補救行動
通過二進制程序的方式安裝,那么這時候MySQL的默認字符集是latin1
,可以修改my.cnf文件中參數,改變默認字符集。
首先,解決數據存儲和比較的問題,但是對客戶端的連接是沒有作用的。
- 在[mysqld]下添加
mysql 5.5 版本
character-set-server=utf8
mysql 5.1 版本
default-character-set=utf8
- 在
[client]
下添加
default-character-set=utf8
這樣建數據庫建表的時候的默認字符集就是utf8
。
客戶端
客戶端登錄時需要設置這幾個參數,但這三個參數是不能寫在配置文件my.cnf里,只能通過set命令來動態修改
SET character_set_client = utf8
SET character_set_results = utf8
SET character_set_connection = utf8
init_connect命令在每個普通用戶連接上來的時候都會觸發執行,可以在[mysqld]
部分增加以下一行設置連接字符集:
在[mysqld]
下添加:
init_connect = 'SET NAMES utf8'
但是要注意的是,這個命令對具有super權限的用戶是不生效的。