標籤:
From: http://www.2cto.com/database/201302/189920.html
-
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”屬性。"
MySql:charset和collation的設定