MySql:charset和collation的設置 charset 和 collation 有多個級別的設置:服務器級、數據庫級、表級、列級和連接級 www.2cto.com 1.服務器級 查看設置:show global variables like 'character_set_server'; 和 show global variables like 'collation_server'; 修改設置:在OPTION FILE (/etc/mysql/my.cnf)裡設置: [mysqld] character_set_server=utf8 collation_server=utf8_general_ci 2. 數據庫級 查看設置:select * from information_schema.schemata where schema_name = 'cookbook'; 設置: 1.若沒有顯式設置,則自動使用服務器級的配置 2.顯式設置:在創建庫時指定 create database playUtf8 DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; www.2cto.com 3.表級 查看設置:show create table course; 設置: 1.若沒有顯式設置,則自動使用數據庫級的配置 2.顯式設置:在創建表時指定 create table utf ( id int ) default charset=utf8 default collate=utf8_bin; 4.列級 查看設置:show create table course; 設置: 1.若沒有顯式設置,則自動使用表級的配置 2.顯式設置: CREATE TABLE Table1(column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci); 5.連接級別 查看設置: show variables like 'character_set_client'; # 服務端使用這個編碼來理解客戶端發來的statements show variables like 'character_set_connection' ; # 我還不知道什麼意思,等看了mysql源碼再說 show variables like 'character_set_results'; # 服務端使用這個編碼回送結果集和錯誤信息 設置: 客戶端在連接時可以指定這些參數;同時,服務端也提供了一個Global范圍的值,客戶端未指定這些參數時,服務端就使用這個Global值。這個global值怎麼設置的? 我查遍了很多文檔,似乎還沒看到設置的辦法 (有人說通過my.cnf,或者在啟動mysqld時指定命令行參數,其實都是錯的) 附:connector/j傳輸SQL時用什麼編碼? 答案: "The character encoding between client and server is automatically detected upon connection. The encoding used by the driver is specified on the server using the character_set_server system variable for server versions 4.1.0 and newer." 也就是說,是在連接時查詢服務器端的character_set_server值,再確定連接將使用的編碼。 不過,官方文檔還說,"要想覆蓋客戶端上的自動檢測編碼功能,可在用於連接到服務器的URL中使用“characterEncoding”屬性。"