mysql導入sql文件出現中文亂碼問題的解決
主要是字符集編碼不一致導致
【具體策略】
如上所述,解決中文亂碼的問題:
首先明確MySQL的默認編碼是Latin1,不支持中文,要支持中午需要把數據庫的默認編碼修改為gbk或者utf8。
一、數據庫端編碼設置
1、需要以root用戶身份登陸才可以查看數據庫編碼方式(以root用戶身份登陸的命令為:>mysql -uroot –p,之后兩次輸入root用戶的密碼),查看數據庫的編碼方式命令為:
>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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
從以上信息可知數據庫的編碼為latin1,需要修改為gbk或者是utf8(先以utf8為例);
其中,character_set_client為客戶端編碼方式;
character_set_connection為建立連接使用的編碼;
character_set_database數據庫的編碼;
character_set_results結果集的編碼;
character_set_server數據庫服務器的編碼;
現將這幾種編碼方式全部改為”utf-8”:
本文僅僅介紹一種最根本的方法:
(1)中止MySQL服務
(2)在MySQL的安裝目錄下找到my.ini,如果沒有就把my-medium.ini復制為一個my.ini即可
(3)打開my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存並關閉
(4)啟動MySQL服務並查詢此時編碼方式:
mysql> show variables like 'character%'; #執行編碼顯示
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client |utf8 |
| character_set_connection | utf8|
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results |utf8 |
| character_set_server |utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
當這八種編碼方式編程utf-8的時候,此時mysql數據庫即可插入中文。
一、產生原因分析
數據庫的編碼格式和導入的.sql數據格式不一致導致
列如:我的數據庫編碼格式為gbk,而導入的數據表格式為utf8,則導入的數據表后其中中文顯示為亂碼
二、解決方案
1.編輯windows下MySQL的安裝路徑下(我的 為C:\Program Files\MySQL\MySQL Server 5.5)my.ini文件,用記事本打開修改以下2處設置為utf8編碼格式:
一處: # CLIENT SECTION 下
default-character-set=utf8
二處: # SERVER SECTION 下
character-set-server=utf8
2.在windows的服務中重啟MySQL服務(我的win7按以下方式啟動無效,我在計算機管理下服務中重啟)
Windows可在服務管理器中操作,也可使用命令行:
net stop MySQL回車
net start MySQL 回車
服務名可能不一定為MySQL,請按自己的設置
3.查看MySQL的設置結果
mysql> show variables like '%character%';
顯示結果應該類似如下:
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.5\share\chars
ets\ |
如果仍有編碼不是utf8的,請檢查配置文件,也可使用mysql命令設置:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
另外:
建立數據庫時可以使用以下命令:
create database 數據庫名 character set utf8;
use 數據庫名;
source 導入的數據庫.sql;
修改數據庫編碼的命令為:
alter database 數據庫名 character set utf8;
特別說明下,我的是win7操作系統,MySQL為MySQL Server 5.5版本,期間重啟MySQL服務器后查看發現character_set_database這個變量還是gbk,其它為utf8(注意不能為utf-8),我最后用alter database character set utf8;后重啟MySQL服務就變過來了!!
4.以上設置好后重啟MySQL再次導入.sql文件后,數據庫表中文顯示正常中文