mysql保存中文亂碼的緣由和解決辦法2012-09-19 10:52:49
我來講兩句 做者:androidjiaocheng
收藏
我要投稿
當你遇到這個mysql保存中文亂碼問題的時候,期待找到mysql保存中文亂碼的緣由和解決辦法這樣一篇能解決問題的文章是多麼激動人心。
也許30%的程序員會選擇本身百度,結果發現網友已經貼了不少相似mysql 中文亂碼、
php mysql 中文亂碼、mysql5.5中文亂碼、mysql 亂碼、mysql亂碼問題、mysql jsp 亂碼、mysql jdbc 亂碼、mysql 查詢亂碼、mysql 導入數據亂碼等一系列問題,到底哪一個是本身要找的能解決本身問題的呀?15%的程序員一看就懵了,剩下15%的程序員本身摸索或求教別人了。70%的程序員乾脆不幹了,幹不動咱仍是程序員,這種浪費生命的事情讓別人幹去把,呵呵。
其實mysql的亂碼問題,說複雜也很是地負責,說簡單簡單的不行!區別就在於明白mysql亂碼的本質緣由,本文就從這個角度目的讓煞筆程序員都掌握如何處理這個亂碼問題。
(1)網站自己的編碼。這很少說了,本身看看設置對了沒,好比我設置的GBK就檢查下編碼是否是GBK。(通常經過文件右擊屬性來看,或創建工程的時候來統一設置)
(2)數據庫鏈接字符串的編碼。好比java中我鏈接mysql的相關語句以下:
public static String driverName = "com.mysql.jdbc.Driver";
public static String userName = "root";
public static String userPasswd = "123456";
public static String dbName = "myBook";
public static String url = "jdbc:mysql://localhost/" + dbName + "?user="
+ userName + "&password=" + userPasswd
+ "&useUnicode=true&characterEncoding=GBK";
。。。。。
Class.forName(driverName).newInstance();
connection = (Connection) DriverManager.getConnection(url);
如上面的代碼中,加粗的就是我要說的部分,能夠設置爲你想要的字符串類型,這裏設置的是GBK,這僅僅是java語言的示例,其餘語言
asp、php原理是同樣的都有這樣的
數據庫字符串連接關於字符集的配置,不會就查查手冊或百度一下,這個很容易找到,若是百度還找不到,那360幹他也對。
這個是重點了,通常都是在這裏搞錯而出現了mysql亂碼。
mysql編碼設置能夠分爲三種設置:數據庫的編碼、表的編碼、和字段的編碼。
a、數據庫的編碼:
在sqlyog工具中操做把,右擊數據庫點擊更改數據庫,如圖
設置就能夠了,煞筆不煞筆,簡單不簡單。
b、表的編碼:
mysql很扯淡的是,表級別也設置了編碼,說說咋設置把

。
右擊要修改編碼的表,點擊更改表如上圖,點了之後以下圖:
點高級屬性,表的字符編碼設置很煞筆很簡單,看到了把。記得修改完畢後,必定要點擊Alter才行呀!這個按鈕很容易被忽略,操蛋的sqlyog呀!
c、字段的編碼:
mysql確實很扯淡,字段都有編碼設置,仍是上面的更改表,不過不點高級屬性了。看圖:
坑爹的默認不顯示,對就是在右下角呢!看到了把,把對號取消把,取消後你看到了下圖:
終於看到了字段後面跟的字符編碼設置,他奶奶的熊,終於都找全了。設置把。記得修改完畢後,必定要點擊Alter才行呀!這個按鈕很容易被忽略,操蛋的sqlyog呀!
最後再出一個絕招把:
SHOW CREATE TABLE 表名
CREATE TABLE `wen` ( `id` int(8) DEFAULT NULL, `bookid` int(8) DEFAULT NULL, `title` varchar(200) COLLATE gbk_bin DEFAULT NULL, `content` longtext COLLATE gbk_bin ) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC