還原因MySQL wait_timeout造成的資料亂碼

以前寫要執行比較久的PHP程式~都只有在前面加上set_time_limit(秒數);~
以免出現Maximum execution time of 30 seconds exceeded的錯誤訊息~跑超過30秒就被停了~

最近才發現~
如果有用到MySQL~程式執行超過MySQL設定的wait_timeout~也會有問題~

超過wait_timeout之後~原本用mysql_connect建出的link會不見~
出現Mysql has gone away的錯誤訊息~
這時候程式還是會繼續執行~不過不管讀還是寫資料庫~中文部分都會變成亂碼~
解決的方法~就是執行mysql_query("SET wait_timeout=秒數");~
延長wait_timeout的時間~就OK囉~
(不過還是很不解~明明已經gone away了~為什麼還可以存取~只是編碼出問題而已勒?)

那如果有很珍貴的資料~已經因此變成亂碼存進資料庫的怎麼辦勒?
今天在我鍥而不捨用65X65種charset組合嘗試下~
終於被我發現可以把亂碼還原回來的方法啦~~~~~~哇哈哈~
就是用mb_convert_encoding('亂碼字串','Windows-1252','auto');
(如果你的資料庫跟我一樣是utf-8的~上面的auto也可改成utf-8)
就可以得到還原成UTF-8的正確字串啦~~~~
(Windows-1252不曉得會不會跟不同系統改變~不過我是在linux上設utf-8的資料庫~)

No Comments yet »

本篇文章的迴響 RSS 訂閱。 TrackBack URI

發表迴響

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.