修改mysql配置解決亂碼
首先:
用show variables like “%colla%”;show varables like “%char%”;這兩條命令查看資料庫與服務端的字元集設定
如果查看出來都是gbk2312,或 gbk,那麼就只能支援簡體中文,繁體和一些特殊符號是不能插入的,我們只有修改字元集為UTF-8,
修改方法如下:
用記事本或UitraEdit開啟mysql資料庫安裝目錄下的my.ini檔案開啟, 然後Ctrl+F搜尋default-character-set,將後面的字元集修改為UTF8,注意要修改兩個地方,一個事用戶端的,一個是服務端的。
然後儲存,重啟mysql服務、、進去繼續用show variables like “%colla%”;show varables like “%char%”;著兩條語句查詢一下字元集
資料表和串連部分的編碼設定
設定資料庫和資料表編碼
要解決亂碼問題,首先必須弄清楚資料庫和資料表用什麼編碼。如果沒有指明,將是預設的latin1。
用得最多的應該是這3種字元集 gb2312,gbk,utf8。
如何去指定資料庫和資料表的字元集呢?下面也gbk為例:
【在MySQL Command Line Client建立資料庫 】
代碼如下 |
複製代碼 |
mysql> CREATE TABLE `mysqlcode` ( -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , -> `content` VARCHAR( 255 ) NOT NULL -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci; Query OK, 0 rows affected, 1 warning (0.03 sec) |
其中後面的
代碼如下 |
複製代碼 |
TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
|
就是指定資料庫的字元集,COLLATE (校勘),讓mysql同時支援多種編碼的資料庫。
當然也可以通過如下指令修改資料庫資料表的字元集:
代碼如下 |
複製代碼 |
alter database mysqlcode default character set 'gbk'.
|
前面已經設定了伺服器、資料庫和資料表的編碼,那麼資料庫中的編碼便都是gbk,中文可以儲存進去。
但是如果你要通過執行insert或select等操作時,仍然會出現中文亂碼問題,這是因為還沒設定
“串連(connection)”部分的編碼,而insert、select等資料庫操作都包含與資料庫的串連動作。如果不信
,你現在可以執行下面的sql文試一試:
代碼如下 |
複製代碼 |
mysql> insert into mysqlcode values(null,'java愛好者'); |
按斷行符號,結果如下:
ERROR 1406 (22001): Data too long for column 'content' at row 1
設定串連編碼
設定了伺服器、資料庫和資料表部分的編碼,必須設定串連編碼。串連編碼設定如下:
代碼如下 |
複製代碼 |
mysql> SET character_set_client='gbk'; mysql> SET character_set_connection='gbk' mysql> SET character_set_results='gbk' |
設定好串連編碼,下面便可以成功插入中文了:
代碼如下 |
複製代碼 |
mysql> insert into mysqlcode values(null,'java愛好者'); Query OK, 0 rows affected (0.02 sec)
|
其實,上面設定串連編碼的三條命令可以簡化為一條:
代碼如下 |
複製代碼 |
mysql> set names 'gbk'; |
設定好了串連編碼後,在select查詢時,也能正確顯示中文:
代碼如下 |
複製代碼 |
mysql> select * from mysqlcode; +----+-----------+ | id | content | +----+-----------+ | 1 | java愛好著 | +----+-----------+ 1 row in set (0.00 sec) |
查詢mysql中文記錄亂碼問題
我們這裡以gb2312編碼亂碼為執行個體來介紹
如果你想使用gb2312編碼,那麼建議你使用latin1作為資料表的預設字元集,這樣就能直接用中文在命令列工具中插入資料,並且可以直接顯示出來.而不要使用gb2312或者gbk等字元集,如果擔心查詢排序等問題,可以使用binary屬性約束,例如:
代碼如下 |
複製代碼 |
create table my_table ( name varchar(20) binary not null default'')type=myisam default charset latin1; |
附:舊資料升級辦法
以原來的字元集為latin1為例,升級成為utf8的字元集。
原來的表:old_table (default charset=latin1),新表:new_table(defaultcharset=utf8)。
第一步:匯出舊資料
代碼如下 |
複製代碼 |
mysqldump --default-character-set=latin1 -hlocalhost -uroot -Bmy_db --tables old_table > old.sql |
第二步:轉換編碼
代碼如下 |
複製代碼 |
iconv -t utf-8 -f gb2312 -c old.sql > new.sql |
在這裡,假定原來的資料預設是gb2312編碼。
第三步:匯入
修改old.sql,增加一條sql語句: "SET NAMES utf8;",儲存。
代碼如下 |
複製代碼 |
mysql -hlocalhost -uroot my_db < new.sql |
大功告成!!
mysql匯入資料亂碼解決
出現亂碼語句:mysql -hlocalhost -uroot -proot test<d:/test.sql
正確的語句:mysql -hlocalhost -uroot -proot test<d:/test.sql --default-character-set=utf8
解決mysql匯入匯出資料亂碼問題
首先要做的是要確定你匯出資料的編碼格式,使用mysqldump的時候需要加上--default-character-set=utf8,例如下面的代碼:
代碼如下 |
複製代碼 |
mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql
|
那麼匯入資料的時候也要使用--default-character-set=utf8:
代碼如下 |
複製代碼 |
mysql -uroot -p --default-character-set=utf8 dbname < bak.sql |
這樣統一編碼就解決了mysql資料移轉中的亂碼問題了