近期有網友留言,總是喜歡打些語言表情符合,如~👶😛🤓
之前 mysql(Mariadb) 資料庫的字集宣告使用
Character set: utf8
Collation: utf8_general_ci
當遇到這類的「文字」,會無法寫入直接 throw exception
把字集都改成更新的 utf8mb4 即可
花了半小時寫了一支自動轉整個 database 的語法:
https://3wa.tw/mypaper/index.php?uid=shadow&mode=view&id=2079
將內容存成「database_to_utf8mb4.php」,執行方式:
php database_to_utf8mb4.php [資料庫]
一輪跑下來自動就把該資料庫裡所有 table column 有 Character set 全都轉
table 宣告也轉、database 也轉
已知遇到的問題:
1、如果你把 varchar 拿來當 index,會有上限 1000byte 的異常
需先把 index 拿掉才能轉換
2、沒有記下 table column comments 註解,之後有其他站要轉,有空再改~
3、沒有羽山刻的 selectSQL_SAFE execSQL_SAFE 也不能跑 XD,想用的同學再私下跟我要 Code 吧
2022-06-07 補充:
資料庫從 utf8 轉成 utf8mb4 後,在每天的自動備份,看備份檔沒有明顯的變化,跟前幾天一樣。
另外在轉檔前,我曾試著在另一台 windows 裡安裝 mariadb ,但因為備份檔已太大(1.9GB)
無法使用 mysql -u帳號 -p < db_2022_06_06.sql 這樣的指令匯入,在windows作業系統如要匯入
,使用 cmd ,進到命令提示字元,需先切換至 utf8 環境
chcp 65001
然後進入 mysql
mysql -u帳號 -p密碼
進入後,再下指令匯入
source db_2022_06_06.sql
轉成 utf8mb4 後還沒有還原匯入,再找時間試試會不會匯失敗
2023-06-19 補充:
在 2023-04 月左右, 3WA 升級新電腦重灌作業系統至 Fedora 38,一次跳了好幾個世代
離上一次裝系統是 2012 年,那時還在用 Fedora 16,幾乎用了 11 才重灌新系統^^"
這次安裝系統直接把之前轉好的 utf8mb4 匯入到資料庫,穩穩的直上
而且 PHP 也從當年的 5.4 (後來末期有裝到 php 7.4,至現在最新的 php 8.2.7RC1)
還好程式不用太大修改都可以繼續使用