MySQL字符集的簡單講解

2021-04-13 08:01:49 字數 2591 閱讀 1354

//測試環境:win32

mysql 5.0.45

//原因:自己的mysql出現亂碼問題

mysql自4.1版本推出之後為我們國人帶來的亂碼問題也隨之風彌整個網際網路。主要原因就是不同字符集編碼不同而產生的。

先說一下mysql的配置中都有哪幾種字符集:

mysql 4.1的字符集支援(character set support)有兩個方面字符集(character set)和排序方式(collation)。對於字符集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和連線(connection)。

我們可以用下面命令檢查mysql當前字符集資訊:

show variables like 「character_set_%」;

show variables like 「collation_%」;

mysql4.1或以上版本的系統預設的編碼是utf-8,而我們的中文編碼為:gbk,gb2312,big5……所以當我們把中文被當做別的字符集轉化為utf-8的字符集,再存入資料庫時就會出現部分文字**丟失而產生亂碼。這就是我們查詢資料庫得到這些資料顯示到網頁上的就是「????」或亂碼的原因。

解決辦法嗎?當然也很簡單,網頁上隨便一搜就能搜到。

解決辦法(1)就是在插入資料之前先設定一下mysql的字符集,即:mysql_query(「set names gbk」) 或是將gbk改為gb2312 或是別的中文字符集。然後再執行插入操作。

《特》《別》《聲》《明》

上面的辦法在我電腦上測試成功。

但我多少感覺有些不舒服,每次查詢前都要寫mysql_query(『set name gbk』);。這一點我挺不滿意的。於是我又開始搜尋,結果我找到了下面將要講到的配置方法

解決辦法(2):配置my.ini檔案。開啟my.ini 找到 [mysql] 找到default-character-set 如果你的mysql是預設安裝的話這裡應該是:utf8。這時將它改為:gbk或是gb2312就行了。( 即不在查詢前加入mysql_query(「set names gbk」)  )

《又》《出》《問》《題》《了》

我照上面的方法改了不知多少次,從gbk改到gb2312又改到utf8始終沒能成功。我想了想,既然網頁傳值不能成功那麼在命提示符下是什麼樣子的呢。

於是我用命令提示符開啟了mysql。測試發現在命令提示符下操作mysql一切正常。弄到這裡我的頭都大了。

mysql命令:(show variables like 「character_set_%」;)

然後我在不執行(mysql_query(「set names gbk」))時向資料庫執行插入,查詢操作,在網頁上一切都顯示正常。呵呵,真是怪了!

為什麼中文字卻能不加轉換的插入到資料庫中?

又為什麼中文本能不加轉換的從資料庫中得到正確資料?

帶著這兩個問題我又開啟命令提示符。執行查詢操作,結果顯示的全是亂碼(當時我想的是:文字應該為gbk編碼)。於是我又執行:set names gbk; 把這個資料庫字符集改為gbk字符集。再執行查詢結果顯示的全部是問號。這到底是怎麼回事,我真的不想再研究了。

我一氣之下把my.ini檔案的[mysql]欄的default-character-set 注釋掉了。重啟mysql後,又執行了一下操作,結果真是大出意料呀,居然正常顯示了。我興奮的不的了。結果我又查詢了一下當前mysql的字符集:呵呵居然是latin1。難道是這裡在做怪?然後我用php插入資料,查詢資料庫(不執行 mysql_query(「set names gbk」)),結果照樣顯示正常。哈哈,問題終於找到了,原來真是這裡在做怪!!!

我想看到這裡大家已經應該明白了,下面我做乙個小總結吧。

《最》《後》《總》《結》(只是個人見解,不負任何法律責任哦!)

(1)在mysql5.0.45環境下,資料庫把由php傳遞的資料預設為latin1 (iso-8859-1) 字符集來處理。即把latin1轉換為utf-8,然後插入。

(2)當php向mysql資料庫中插入資料前執行(mysql_query(「set names gbk」))mysql才會以php查詢中指定的字符集(gbk)轉換為utf-8後插入。

(3)cmd模式下操作mysql,和用php操作在字符集處理上是兩種概念。cmd下操作mysql,mysql會把cmd下的資料預設為mysql預設的字符集轉換為utf-8後處理。而處理php資料mysql會預設為 latin1 資料做處理。

《----我最後的配置----》:

因為我只是在本地作測試,為了測試時少寫一行mysql_query(「set names gbk」)。所以我把 my.ini 的 [ mysql ] 欄default-characte_set 改為 latin1。這樣無論自己在本地測試或是cmd下操作mysql都很方便。但是如果你用的是phpmyadmin的話,可能會顯示亂碼,解決辦法就是安裝乙個支援字符集為 latin1的phpmyadmin。字符集和字符集校對都為 latin1 ,就能正常顯示了。

《關》《於》《數》《據》《庫》《備》《份》

因為mysql4.1之前採用的中文字符集為 gbk 或 gb2312。建議備份和恢復資料庫前先執行 set name gbk ;命令即可解決亂碼問題。

好了,寫完了,這是我對mysql字符集的一點見解。若有不對之處還望指證。88了先,休息一會……

by:dx_andy

mysql 集群字符集 Mysql 字符集

字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...

mysql字符集 MySQL字符集選擇

一 怎樣選擇合適的字符集 對mysql資料庫來說,字符集很重要,因為資料庫儲存的資料大部分都是各種文字,字符集對資料庫的儲存,處理效能都會有所影響。主要考慮一下幾方面的因素 1.滿足應用支援語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇unicode字符集,mysql的...

mysql api 字符集 MySQL字符集

mysql字符集包括字符集 character 和 collation 兩個概念。字符集是用來定義mysql儲存字串的規則,校對規則則是定義了比較字串的方式。字串和校對規則是一對多的 關係。使用命令 show collation like gbk 可檢視相關的校對規則 使用 show charact...