emoji - thinkphp mysql 如何對指定表使用指定字元編碼進行查詢和操作?

WBOY
發布: 2016-08-10 09:07:14
原創
1196 人瀏覽過

問題是這樣的:
有一資料庫,裡面有很多表,也有很多已存在的數據,這些數據多數都是用utf8儲存的(不全是,還有latin1的)。
遇到了用戶存emoji導致儲存失敗的問題,已知是需要utf8mb4才能正確儲存。

已經把mysql從5.1升級到5.6.26了。接下來的想法和已有的嘗試:
1、如果把整個資料庫都更新成uft8mb4的話,風險太大,因為各種調用的地方亂七八糟,維護不良,直接變成utf8mb4的話可能整個系統都不正常。

2、考慮只把使用者會儲存emoji的表(以下簡稱表E)更新成uft8mb4,然而這裡系統用的是thinkphp寫的,編碼設定是放在config.php中的,修改這裡的話,thinkphp就全滅了。

3、接著2考慮的話,thinkphp主體仍然用uft8不變,僅在查詢這個表E的時候臨時使用uft8mb4進行查詢。嘗試M()->query('SET NAMES 'utf8mb4'');結果報錯:SQLSTATE[HY000]: General error

4、仍考慮2的方法發現也不行。因為即使查詢了這個表E成功之後,又會進行其他表格的操作,uft8mb4又可能會導致接下來的查詢出錯。

求助有沒有好的辦法能只針對這一表進行以utf8mb4為編碼的操作,並且還不影響其他表的操作。

PS:因為生產環境已經上線一年了已有很多數據和線上用戶,而現在測試才報出來有這個問題。資料庫整體更新編碼實在風險太大,領導的意思是哪有坑先填哪,沒發現的坑就假裝沒看見。
幸運的是生產環境當時搭建系統時是我安裝的,mysql一開始就是當時的最新版5.6.26。 emoji再轉碼的方法希望只作為最後的解決方法。

回覆內容:

問題是這樣的:
有一資料庫,裡面有很多表,也有很多已存在的數據,這些數據多數都是用utf8儲存的(不全是,還有latin1的)。
遇到了用戶存emoji導致儲存失敗的問題,已知是需要utf8mb4才能正確儲存。

已經把mysql從5.1升級到5.6.26了。接下來的想法和已有的嘗試:
1、如果把整個資料庫都更新成uft8mb4的話,風險太大,因為各種調用的地方亂七八糟,維護不良,直接變成utf8mb4的話可能整個系統都不正常。

2、考慮只把使用者會儲存emoji的表(以下簡稱表E)更新成uft8mb4,然而這裡系統用的是thinkphp寫的,編碼設定是放在config.php中的,修改這裡的話,thinkphp就全滅了。

3、接著2考慮的話,thinkphp主體仍然用uft8不變,僅在查詢這個表E的時候臨時使用uft8mb4進行查詢。嘗試M()->query('SET NAMES 'utf8mb4'');結果報錯:SQLSTATE[HY000]: General error

4、仍考慮2的方法發現也不行。因為即使查詢了這個表E成功之後,又會進行其他表格的操作,uft8mb4又可能會導致接下來的查詢出錯。

求助有沒有好的辦法能只針對這一表進行以utf8mb4為編碼的操作,並且還不影響其他表的操作。

PS:因為生產環境已經上線一年了已有很多數據和線上用戶,而現在測試才報出來有這個問題。資料庫整體更新編碼實在風險太大,領導的意思是哪有坑先填哪,沒發現的坑就假裝沒看見。
幸運的是生產環境當時搭建系統時是我安裝的,mysql一開始就是當時的最新版5.6.26。 emoji再轉碼的方法希望只作為最後的解決方法。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!