MAC下 mysql不能插入中文和中文亂碼的問題總結
前言
本文中所提到的問題解決方案,都是基於mac環境下的,但其他環境,比如windows應該也適用。
問題描述
本文解決下邊兩個問題:
- 往mysql插入中文,能夠成功,但mysql顯示亂碼
- 不能往mysql插入中文,插入英文或數字能夠成功
其實,問題的根源還是文件或內容間使用了不同的編碼方式造成的。首先查看當前使用的瀏覽器默認的編碼方式是什么?

可以看出,這個網頁的編碼為中文gbk,再看簡書的網頁:

可以看出,大部分的網站都是utf8編碼的。也就是說在中文gbk的編碼下出的問題。
解決問題
按照下邊步驟設置:
-
找到mysql的安裝目錄下的
my-default.cnf這個文件。我的電腦的路徑為/usr/local/mysql-5.7.15-osx10.11-x86_64/support-files/my-default.cnf.
-
復制
my-default.cnf到目錄/etc下(打開Finder,使用快捷鍵command+shift+g),然后改名字為my.cnf. -
修改
my.cnf的內容為(這里的gbk也可換成utf8):[client] default-character-set=gbk [mysqld] default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci -
重啟mysql,最好新建一個數據庫,
create database name(name是你想要創建的名稱)
代碼
如果上邊的弄完之后還有問題,那么就要在代碼中對字符串進行utf8轉換了。
轉換函數為:
function is_utf8($word){
if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true
|| preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true
|| preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true){
return true;
}else{
return false;
}
}
使用iconv函數轉換字符串:
if (!is_utf8($isbn)) {
$isbn = iconv('gb2312','utf-8',$isbn);
}
if (!is_utf8($author)) {
$author = iconv('gb2312','utf-8',$author);
}
if (!is_utf8($title)) {
$title = iconv('gb2312','utf-8',$title);
}
說明
在使用中,用上邊的函數轉換后,就能正常保存到mysql了,如果您發現那里有錯誤的地方,請一定要指出來啊。。。。
