1、查看字元集相關變數
mysql> show variables like 'character%';
+————————–+——————————-+| Variable_name | Value |+————————–+——————————-+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | c:\wamp\mysql\share\charsets\ |+————————–+——————————-+
2、字元集轉換過程
用戶端——–字元集轉換器———–服務
gbk ————gbk-utf8-utf8———-utf8
gbk————-gbk-gbk-utf8———-utf8
用戶端要告訴服務端使用的編碼是什麼,然後沒有直接告訴伺服器而告訴“轉換器”
字元集轉換器收到用戶端資訊後查看伺服器是什麼編碼,然後將用戶端傳來的字元集轉換成伺服器設定的字元集
伺服器向用戶端發送資訊時也是先告訴“轉換器”
3、字元集變數解釋
character_set_client
用戶端字元集,串連mysql的用戶端程式的字元集,該變數告訴轉換器用戶端發送的字元集。
character_set_connection
轉換器轉換要轉換成的字元集
character_set_server
服務端使用的字元集,存入資料時使用的字元集
character_set_results
查詢的結果是什麼編碼
推論:什麼時候會出現亂碼
1:client 什麼與實際不符,微軟命令提示字元預設是gbk,如果設定成utf8就會出現亂碼
2:results與用戶端頁面不符的時候
什麼時候會遺失資料
connection和伺服器的字元集比client小時,會遺失資料,比如用戶端是utf8而轉換器是gbk
當用戶端是utf8 而服務端是 gbk時要設定
set character_set_client=utf8
set character_set_connection=gbk/utf8 這裡設定什麼都可以,因為最終轉換器會根據伺服器的類型進行轉換
set character_set_results=utf8
4、設定字元集變數
set names utf8 進入mysql設定所用的字元集
在my.conf中添加
[client]default-character-set=utf8[mysqld]default-character-set=utf8
5.修改mysql字元集
將latin1字元集的資料庫修改成gbk字元集的資料庫的過程
(1)、匯出表結構
mysqldump -uroot -p –default-character-set=gbk -d DATABASE_NAME > createtable.sql
–default-character-set=gbk 表示以什麼字元集串連
-d 表示只匯出表結構,不匯出資料
(2)、修改createtable.sql檔案中的表結構定義的字元集為新字元集
(3)、匯出所有記錄
mysqldump -uroot -p –quick –no-create-info –extend-insert –default-character-set DATABASE_NAME > data.sql
–quick:改訊息用於轉儲大的表。它強制mysqldump從伺服器一次一行的檢索表中的行二不是檢索所有行,並在輸出錢將它緩衝到記憶體中
–extended-insert:使用包括幾個values列表的多行insert文法。這樣轉儲檔案更小,重載檔案時可以加速插入
–no-create-info:不重新建立每個轉儲表的create table 語句
–default-character-set=latin1:安裝原有的字元集匯出所有資料,這樣匯出的檔案中,所有中文都是可見的,不會儲存成亂碼
(4)、頻寬data.sql,將set names latin1 修改成set names gabk
(5)、使用新的字元集建立新的資料庫
create database DATABASE_NAME default charset gbk;
(6)、建立表,執行createtable.sql
mysql -uroot -p DATABASE_NAME < createtable.sql
(7)、匯入資料,執行data.sql
mysql -uroot -p DATABASE_NAME < data.sql