MySQL數(shù)據(jù)庫中文變問號'???' 解決
今天遇到了一個(gè)問題,后端邏輯處理完存到MySQL數(shù)據(jù)庫里的中文內(nèi)容都變成問號 ‘???’了。 第一反應(yīng)是我數(shù)據(jù)庫的排序規(guī)則搞錯(cuò)啦? 馬上登上phpadmin看了一眼,沒毛病 都是utf8_general_ci,手動修改問號成中文也都正常顯示。 這里要說一下另外一個(gè)問題,開始沒注意這個(gè)排序規(guī)則,默認(rèn)的是latin1。導(dǎo)致的問題就是數(shù)據(jù)表中完全不能顯示中文,不是亂碼 是直接報(bào)錯(cuò)。
好啦,既然不是這個(gè)問題,那又是什么呢?
在網(wǎng)上找了一下,問題還挺“普遍的”。大致上就是字符集編碼問題,改一下就好了,下面是我找到的解決方式(參考其他答主 因?yàn)樘闼榱司筒灰灰毁N參考鏈接了 再說我也實(shí)在不知道哪個(gè)才是原答主【ε=ε=ε=┏(゜ロ゜;)┛】):系統(tǒng)環(huán)境是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
按照網(wǎng)上其他答案 這時(shí)候應(yīng)該可以了。但是……
what???我發(fā)現(xiàn)并沒有什么用呀?!!!
好吧,下面 才是我真正想說的 :
首先第一步,修改這些配置文件的時(shí)候,你會發(fā)現(xiàn)它們是read only 也就只讀的。所以我們理所應(yīng)當(dāng)?shù)那孟铝讼旅娴拿?/p>
- sudo chmod -R 777 /ect/MySQL/my.cnf
(我知道這不是個(gè)好習(xí)慣,但是真的很多人都這是這么做的-/-)
好的,這個(gè)時(shí)候終于可以修改my.cnf啦
這個(gè)時(shí)候,有的同學(xué)可以順利的修改 進(jìn)行下一步啦。但是!!!以我為代表的另一部分同學(xué)就倒霉啦,打開 my.cnf 一看…… what?? 基本就是個(gè)空的,毛都沒有?!好啦好啦 請坐下,這個(gè)時(shí)候你要看一看下邊是不是有個(gè) include****** 對記住后邊的文件 去這些文件里做修改就行啦。其實(shí),你直接把需要修改的內(nèi)容寫在 my.cnf中也是可以的,我就這么干了。
終于到了最后一步,重啟完 mysql,又試了一下,還是亂碼……
問題出在哪呢?請跟我做:
- sudo mysql -u root -q
回車之后,會有個(gè)warning /etc/mysql/my.cnf Ignore
意思是my.cnf被忽略了。它被忽略了 那我們的修改肯定沒有用了呀。
其實(shí),我們一開始修改了它的讀寫權(quán)限是 777,所有人都可以讀寫它。系統(tǒng)認(rèn)為它不安全,才有了這個(gè)warning。
所以再我們修改完之后,要再改一下它的權(quán)限,比如 644?
好的 現(xiàn)在重啟mysql 再實(shí)驗(yàn)一下 沒問題啦!!!
ps: 查看mysql 字符集編碼命令:
- sudo mysql -u root -p
進(jìn)入mysql 然后輸入命令
- show variables like ‘%character%’;
就可以看到了 沒截圖 就不放了。
啰里啰唆說了一堆,主要是把我遇到的坑記錄一下。如果對你有幫助 那我也很開心。