問題是這樣的:
有一資料庫,裡面有很多表,也有很多已存在的數據,這些數據多數都是用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再轉碼的方法希望只作為最後的解決方法。