修改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同時支持多種編碼的數據庫。
當然也可以通過如下指令修改數據庫數據表的字符集:
前面已經設置了服務器、數據庫和數據表的編碼,那麼數據庫中的編碼便都是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愛好者');
其實,上面設置連接編碼的三條命令可以簡化為一條:
設置好了連接編碼後,在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數據遷移中的亂碼問題了