MySQL數據庫中文變問號'???' 解決
今天遇到了一個問題,后端邏輯處理完存到MySQL數據庫里的中文內容都變成問號 ‘???’了。 第一反應是我數據庫的排序規則搞錯啦? 馬上登上phpadmin看了一眼,沒毛病 都是utf8_general_ci,手動修改問號成中文也都正常顯示。 這里要說一下另外一個問題,開始沒注意這個排序規則,默認的是latin1。導致的問題就是數據表中完全不能顯示中文,不是亂碼 是直接報錯。
好啦,既然不是這個問題,那又是什么呢?
在網上找了一下,問題還挺“普遍的”。大致上就是字符集編碼問題,改一下就好了,下面是我找到的解決方式(參考其他答主 因為太零碎了就不一一貼參考鏈接了 再說我也實在不知道哪個才是原答主【ε=ε=ε=┏(゜ロ゜;)┛】):系統環境是Ubuntu 14.04,Windows請找my.ini。
1.
- sudo vi /etc/mysql/my.cnf
2.在[client]/[mysqld_safe]/[mysql]下面依次加入
- default-character-set=utf8
- 在[mysqld]下面加入
- init_connect=’SET collation_connection = utf8_unicode_ci’
- init_connect=’SET NAMES utf8’
- character-set-server=utf8
- collation-server=utf8_unicode_ci
- skip-character-set-client-handshake
3.重啟mysql
- sudo /etc/init.d/mysql restart
按照網上其他答案 這時候應該可以了。但是……
what???我發現并沒有什么用呀?!!!
好吧,下面 才是我真正想說的 :
首先第一步,修改這些配置文件的時候,你會發現它們是read only 也就只讀的。所以我們理所應當的敲下了下面的命令
- sudo chmod -R 777 /ect/MySQL/my.cnf
(我知道這不是個好習慣,但是真的很多人都這是這么做的-/-)
好的,這個時候終于可以修改my.cnf啦
這個時候,有的同學可以順利的修改 進行下一步啦。但是!!!以我為代表的另一部分同學就倒霉啦,打開 my.cnf 一看…… what?? 基本就是個空的,毛都沒有?!好啦好啦 請坐下,這個時候你要看一看下邊是不是有個 include****** 對記住后邊的文件 去這些文件里做修改就行啦。其實,你直接把需要修改的內容寫在 my.cnf中也是可以的,我就這么干了。
終于到了最后一步,重啟完 mysql,又試了一下,還是亂碼……
問題出在哪呢?請跟我做:
- sudo mysql -u root -q
回車之后,會有個warning /etc/mysql/my.cnf Ignore
意思是my.cnf被忽略了。它被忽略了 那我們的修改肯定沒有用了呀。
其實,我們一開始修改了它的讀寫權限是 777,所有人都可以讀寫它。系統認為它不安全,才有了這個warning。
所以再我們修改完之后,要再改一下它的權限,比如 644?
好的 現在重啟mysql 再實驗一下 沒問題啦!!!
ps: 查看mysql 字符集編碼命令:
- sudo mysql -u root -p
進入mysql 然后輸入命令
- show variables like ‘%character%’;
就可以看到了 沒截圖 就不放了。
啰里啰唆說了一堆,主要是把我遇到的坑記錄一下。如果對你有幫助 那我也很開心。