標籤:資料庫亂碼解決
1、問題確認:資料庫亂碼歸集為字元集問題;
查每個字元集的校隊規則:show character set; (觀察例 utf8 utf8_general_ci )
建立gbk字元集資料庫:
create database name_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
建立:utf8字元集資料庫:
create database name_ntf8 CHARACTER SET utf8 COLLATE utf8_general_ci;
#CHARACTER SET 指定字元集; COLLATE gbk_chinese_ci:校對規則;
=======================================然後解決===========================================
法1:
確認庫、表的字元集一致
#一般這是臨時的,重新登入後需重新設定;
註明:DQL.DQL語句之前set names系統及庫表的字元集!
2、查看字元集:
show create database basename\G
*************************** 1. row ***************************
Database: basename
Create Database: CREATE DATABASE `basename` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
##資料庫預設的字元集為latin1
3、調整字元集:
set names latin1;
##正常情況下插入中文字元集時先調整;
4、插入語句後檢查:select * from test;
法2
匯入的時候 指定字元集(set names latin1),後利用source負載檔案;
1、把將要跟新的多個sql語句放到文本裡;
#此處注意要set names Latin1; >test.sql
2、進入資料後查看:system cat test.sql
3、利用source 將test.sql 匯入;(建議全路徑)
4、set names latin1;
5、檢查:select * from test;
或者:在sql檔案中指定字元集 (set names latin1),然後通過mysql命令匯入;
法3:
匯入的時候--default-character-set=latin1指定字元集
在mysql匯入的時候指定字元集
:mysql -uroot -p‘oldboy123‘ --default-character-set=latin1 test < test.sql
4、在設定檔設定用戶端及服務端指定字元集,且永久生效;
更改my.cnf用戶端模組的參數,可以實現set names latin1;的效果,並且永久生效。
[clinet]
--default-character-set=latin1
提示:無需重啟服務,退出重新登入就生效;相當於set names latin1;
更改服務端字元集簡單的方法;
更改my.cnf參數
[mysqld]
--default-character-set=latin1 適合5.1 及以前的版本;
character-set-server=latin1 適合5.5
總之:保證linux系統、用戶端、服務端、庫、表、程式!字元集統一就不會亂碼。
系統字元集設定位置: /etc/sysconfig/i18n ,建議使用LANG=zh_CN.utf8 (中英文環境)
本文出自 “一如既往” 部落格,謝絕轉載!
論mysql資料庫亂碼