對MySQL中字符集的相關設置操作的基本教程
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
客戶端要告訴服務端使用的編碼是什么,然后沒有直接告訴服務器而告訴“轉換器”
字符集轉換器收到客戶端信息后查看服務器是什么編碼,然后將客戶端傳來的字符集轉換成服務器設置的字符集
服務器向客戶端發(fā)送信息時也是先告訴“轉換器”
3、字符集變量解釋
character_set_client
客戶端字符集,連接mysql的客戶端程序的字符集,該變量告訴轉換器客戶端發(fā)送的字符集。
character_set_connection
轉換器轉換要轉換成的字符集
character_set_server
服務端使用的字符集,存入數(shù)據(jù)時使用的字符集
character_set_results
查詢的結果是什么編碼
推論:什么時候會出現(xiàn)亂碼
1:client 什么與實際不符,微軟命令提示符默認是gbk,如果設置成utf8就會出現(xiàn)亂碼
2:results與客戶端頁面不符的時候
什么時候會丟失數(shù)據(jù)
connection和服務器的字符集比client小時,會丟失數(shù)據(jù),比如客戶端是utf8而轉換器是gbk
當客戶端是utf8 而服務端是 gbk時要設置
set character_set_client=utf8
set character_set_connection=gbk/utf8 這里設置什么都可以,因為最終轉換器會根據(jù)服務器的類型進行轉換
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字符集的數(shù)據(jù)庫修改成gbk字符集的數(shù)據(jù)庫的過程
(1)、導出表結構
mysqldump -uroot -p –default-character-set=gbk -d DATABASE_NAME > createtable.sql
–default-character-set=gbk 表示以什么字符集連接
-d 表示只導出表結構,不導出數(shù)據(jù)
(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:不重新創(chuàng)建每個轉儲表的create table 語句
–default-character-set=latin1:安裝原有的字符集導出所有數(shù)據(jù),這樣導出的文件中,所有中文都是可見的,不會保存成亂碼
(4)、帶寬data.sql,將set names latin1 修改成set names gabk
(5)、使用新的字符集創(chuàng)建新的數(shù)據(jù)庫
create database DATABASE_NAME default charset gbk;
(6)、創(chuàng)建表,執(zhí)行createtable.sql
mysql -uroot -p DATABASE_NAME < createtable.sql
(7)、導入數(shù)據(jù),執(zhí)行data.sql
mysql -uroot -p DATABASE_NAME < data.sql
相關文章
MySQL Antelope和Barracuda的區(qū)別分析
這篇文章主要介紹了MySQL Antelope和Barracuda的區(qū)別分析,Antelope和Barracude都是一種文件格式,需要的朋友可以參考下2014-07-07
MySQL Installer is running in Community mode 的解決辦法
這篇文章主要介紹了MySQL Installer is running in Community mode 的解決辦法,需要的朋友可以參考下2018-06-06
分組查詢GROUP BY的使用與SQL執(zhí)行順序的講解
今天小編就為大家分享一篇關于分組查詢GROUP BY的使用與SQL執(zhí)行順序的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
為什么MySQL 使用timestamp可以無視時區(qū)問題.
這篇文章主要介紹了為什么MySQL timestamp可以無視時區(qū)問題,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下2020-12-12
Ubuntu下完美實現(xiàn)遷移MySQL數(shù)據(jù)庫位置
這篇文章主要介紹了Ubuntu下完美實現(xiàn)遷移MySQL數(shù)據(jù)庫位置,十分詳細,有需要的小伙伴可以參考下2015-03-03

