小編在進行文字儲存時,透過orm進行操作,最終指令如下
insert into goal_details
(created_at, domain_code, goal_id, is_achieved, level, reason, remark,
smart_goals,
sub_domain_code, updated_at)
values
('2023-05-22 15:18:38', 'DOMAINS.NUTRITION', 103, false, 1, NULL, NULL,
'如工作時外出午餐, 會到粉麵店叫低脂肉(牛筋, 牛𦟌,魚旦)+米粉/米線',
'SUB_DOMAINS.NUTRITION.REDUCE_FAT', '2023-05-22 15:18:38')
然後報錯:Incorrect string value:......
經過反覆測試發現問題在“𦟌”這個字上面,只要移除就沒事了。但想當然客戶不會接受這無理的需求,而且未來會不會有其他字無法存取不知道,所以只好再想辦法。
小編此時資料庫編碼為utf8mb4,理論上不應該呀,遵循chatGPT指示,嘗試把collation從utf8mb4_0900_ai_ci改成utf8mb4_unicode_520_ci,但問題還是沒有解決。
在苦無對策之際,我嘗試著把上面這句sql直接透過Navicat直接執行,竟然通過了!!所以問題並不在db,那就是在AdonisJs框架了,然後我想了一下,好像之前遇到要寫入表情符號時也遇過相同的錯誤訊息,最初db連線資訊預設是utf8mb3,那這樣似乎就說得通了,所以把config/database.ts的連線資訊加入charset,把它改成跟db一樣utf8mb4即可
mysql: {
client: 'mysql',
connection: {
host: Env.get('MYSQL_HOST'),
port: Env.get('MYSQL_PORT'),
user: Env.get('MYSQL_USER'),
password: Env.get('MYSQL_PASSWORD', ''),
database: Env.get('MYSQL_DB_NAME'),
// 加入charset
charset: 'utf8mb4',
},
// ...略
},
沒有留言:
張貼留言