多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > MySql > MySQL字符集產生亂碼的簡單講解

MySQL字符集產生亂碼的簡單講解

來源:程序員人生   發布時間:2014-06-10 14:20:49 閱讀次數:3668次
MySQL 4.1的字符集支持(Character Set Support)有兩個方面字符集(Character set)和排序方式(Collation)。   //標題:MySQL字符集簡單講解(個人總結)

  //作者:dx_andy

  //時間:2007.8.27 晚

  //測試環境: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一切正常。弄到這里我的頭都大了。

  我又重新配置了一下PHP環境,下載的最新AppServ 2.5.9。檢查一下MySQL字符集,默認字符集是UTF8。

  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 ;命令即可解決亂碼問題。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕精品视频 | 一级毛片在线观看免费 | 最近中文字幕2019年免费 | 女人l8毛片a一级毛片 | 国产欧美日韩在线一区二区不卡 | 精品国产成人综合久久小说 | 久久久亚洲精品国产 | 国产在线观看精品一区二区三区91 | 中文国产成人精品久久久 | 91伊人久久| 9久热久爱免费精品视频在线观看 | 亚洲人成在线影院 | 欧美精品日韩一区二区三区 | 1314成人网| 国产成人久久精品一区二区三区 | 在线 丝袜 欧美 日韩 制服 | 青青草久热精品视频在线观看 | 国产亚洲人成在线影院 | 激情综合婷婷丁香六月花 | 亚洲剧情在线 | 日本欧美一区二区三区视频麻豆 | 亚洲第一视频网 | 一区二区三区高清不卡 | 性感美女视频免费网站午夜 | 免费国产一区二区在免费观看 | 色综合久久久久久久久久久 | 国产一级淫片a免费播放口之 | 国产一区亚洲欧美成人 | 亚洲精品第一 | 欧美一级视频免费观看 | 国产成人美女福利在线观看 | 久久久久国产精品免费免费不卡 | 亚洲欧洲日本天天堂在线观看 | 久久久久久久久久久久久久久久久久久久 | 国产成人亚洲精品无广告 | 视频h在线 | 亚洲人成依人成综合网 | xxxx日本hd高清 | 国产91久久精品 | 亚洲欧美一级久久精品 | 插插插网站|