mysql中文亂碼問題各種解決辦法

來源:互聯網
上載者:User

修改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資料移轉中的亂碼問題了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.