當你遇到這個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干他也對。
(3)mysql的字符集設置。
這個是重點了,一般都是在這裡搞錯而出現了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