MAC下 mysql不能插入中文和中文亂碼的問題總結


MAC下 mysql不能插入中文和中文亂碼的問題總結

前言

本文中所提到的問題解決方案,都是基於mac環境下的,但其他環境,比如windows應該也適用。

問題描述

本文解決下邊兩個問題:

  1. 往mysql插入中文,能夠成功,但mysql顯示亂碼
  2. 不能往mysql插入中文,插入英文或數字能夠成功

其實,問題的根源還是文件或內容間使用了不同的編碼方式造成的。首先查看當前使用的瀏覽器默認的編碼方式是什么?

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

可以看出,大部分的網站都是utf8編碼的。也就是說在中文gbk的編碼下出的問題。

解決問題

按照下邊步驟設置:

  1. 找到mysql的安裝目錄下的my-default.cnf這個文件。我的電腦的路徑為/usr/local/mysql-5.7.15-osx10.11-x86_64/support-files/my-default.cnf.

  2. 復制my-default.cnf到目錄/etc下(打開Finder,使用快捷鍵command+shift+g),然后改名字為my.cnf.

  3. 修改my.cnf的內容為(這里的gbk也可換成utf8):

     [client]
     default-character-set=gbk
     [mysqld]
     default-storage-engine=INNODB
     character-set-server=utf8
     collation-server=utf8_general_ci
    
  4. 重啟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了,如果您發現那里有錯誤的地方,請一定要指出來啊。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM