使用Navicat存儲中文數(shù)據(jù)出現(xiàn)亂碼或者空白的問題。經(jīng)過一番折騰終于得到解決。
表my_chat設計如下:
在數(shù)據(jù)庫chatroom上右擊打開console控制臺,輸入SHOW VARIABLES LIKE '%character_%';
可以看到MySQL 相關編碼的設置,全部修改為utf8后如下:
若編碼不統(tǒng)一可以參照這篇文章修改:MySQL 編碼設置http://eagletff.blog.163.com/blog/static/116350928201171543523558
1、編輯MySQL 的配置文件
MySQL 的配置文件Windows下一般在系統(tǒng)目錄下或者在MySQL 的安裝目錄下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf
--在 [mysqld] 標簽下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1 //表名不區(qū)分大小寫(此與編碼無關)
--在 [mysql] 標簽下加上一行
default-character-set = utf8
--在 [mysql.server]標簽下加上一行
default-character-set = utf8
--在 [mysqld_safe]標簽下加上一行
default-character-set = utf8
--在 [client]標簽下加上一行
default-character-set = utf8
2、重新啟動MySQL 服務
Windows可在服務管理器中操作,也可使用命令行:
net stop mysql 回車
net start mysql 回車
服務名可能不一定為MySQL ,請按自己的設置
Linux下面可是用 service mysql restart
如果出現(xiàn)啟動失敗,請檢查配置文件有沒有設置錯誤
開始的時候是author與emotion字段中文亂碼:
按上述方法,我在自己的my.ini中只找到了[client]和[mysql]兩項,按上述方法修改后,保存的時候提示含有unicode字符,于是我另存,替換,但是
在重新啟動MySQL 服務的時候一直失敗。
最終發(fā)現(xiàn)該配置文件重新改回ANSI編碼后,再加入上述修改,可正常啟動MySQL 。
新的問題出現(xiàn):字符類型為varchar的字段中文顯示為空白(author和emotion字段),
此法不奏效。
網(wǎng)上找到的第二種方法:Navicat for MySQL 顯示中文亂碼解決辦法
http://blog.163.com/chenyao_2000/blog/static/1280109302011431476629/
最近遇到一個問題,用Navicat for MySQL 打開數(shù)據(jù)庫時全都顯示的是亂碼(在用程序代碼插入數(shù)據(jù)之前確保字符不是亂碼),遇到問題就的尋求解決之道,百度了好長時間也沒解決,網(wǎng)上那些解決辦法都不適合我的問題,網(wǎng)上的大多數(shù)解決方法是在navicat里右擊一個連接,選擇連接屬性,切換到高級選項卡,去掉“使用MySQL 字符集”前的對勾,在編碼里選擇utf-8,這種方法對于部分問題可能適合,但是我的亂碼問題依然存在,于是乎我又將utf-8改稱gbk,gb2312,全都過問題依然粹依舊。
后來跟一個編程的老程序員請教了一下,他說可能是MySQL 的配置文件有問題,就是在MySQL 的安裝目錄下的my.ini文件里的默認編碼有問題,將my.ini文件的這兩處的默認編碼
==========================================
[mysql]
default-character-set=utf8 <------
==========================================
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8 <------
===========================================
箭頭所指的地方確保為utf8(注意不是utf-8),navicat 里的使用的是MySQL 字符集(此時不用再選擇utf-8編碼), 問題才得以解決!
上述方法后半部分跟第一種方法一樣,他這里解決了,但是我沒能實現(xiàn)。
反而是利用紅色部分的方法找到了解決辦法。
在navicat里右擊一個連接,選擇連接屬性,切換到高級選項卡,去掉“使用MySQL 字符集”前的對勾,在編碼里選擇Default
我在編碼里選擇utf8之后,
查看表時,又出現(xiàn)了空白
最終解決辦法是,在最后編碼的地方不是選擇utf8而是Default。熟悉的中文就回來了!
總結(jié):一般的解決辦法兩種:
1、修改MySQL 的配置文件在相對應的位置添加如下代碼
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
重啟服務。
但是可能導致無法重啟,可以把配置文件編碼修改為ANSI試試。
2、
在navicat里右擊一個連接,選擇連接屬性,切換到高級選項卡,去掉“使用MySQL 字符集”前的對勾,在編碼里選擇Default
也有人編碼的地方可能是“Current Windows Codepage”,此法不修改my.ini。
注:
要保證不亂碼,就必須將三個編碼統(tǒng)一:一是網(wǎng)頁自身的編碼,二是HTML里指定的編碼,三是PHP告訴Mysql的編碼(包括character_set_client和character_set_results)。
第一和第二個編碼,如果使用DW之類的編輯器寫的網(wǎng)頁,通常是一致的,但用記事本寫的網(wǎng)頁,有可能不一致。
第三個編碼,需要手工通知Mysql。這步可以通過在PHP里使用mysql_query("set names characterX")來實現(xiàn)。(出自:PHP和MySQL的編碼問題)
最后貼幾個比較有參考意義的文章:
MySQL 編碼設置 http://eagletff.blog.163.com/blog/static/116350928201171543523558
Navicat for MySQL 顯示中文亂碼解決辦法http://blog.163.com/chenyao_2000/blog/static/1280109302011431476629/
MySQL 中文亂碼解決 http://jingyan.baidu.com/article/e4d08ffdd9bd630fd2f60de6.html
MySQL插入中文顯示不了的問題 http://hi.baidu.com/yulewujixian/item/8a2e80ec9be075b52f140b23
PHP和MySQL的編碼問題 http://blog.csdn.net/martinkro/article/details/5352474
中文常用編碼方式(GBK,GB2312,Unicode) http://blog.sina.com.cn/s/blog_5ac88b350100c2bx.html
UNICODE,GBK,UTF-8區(qū)別 http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html
聯(lián)系客服