2022年2月24日 星期四

在DB裡存放emoji符號

在文字編輯器裡時時常會遇到需要輸入表情的需求(圖1)


然後送出一班會傳來後端報錯的訊息,sql無法寫入
錯誤碼:ER_TRUNCATED_WRONG_VALUE_FOR_FIELD

然後上網尋找答案原因是一個表情符號就佔用了四個字元(實際看起來會長這樣\xF0\x9F\xA4\x94)(圖2)

所以😀不單純如我想像他是個^_^組合文字
那問題來了,舊版DB charset utf8只能存放三個位元的字,所以會報錯,解決方式有兩種,第一就是轉成utf8Array,然後再轉成文字存入,取出再decode,但這個方法較為麻煩,已很容易忘記decode就會看到一串物件

所以我選用從根本解決方式,就是把db charset改成新的utf8mb4(圖3),這樣就可以直接存字個字元的文字了,程式碼也不用做什麼調整,唯一容易疏忽的就是,不光是DB要改,程式碼的連線資訊也要改(這很容易忽略)(圖4)



最終結果(圖5),打完收工!

參考網站
https://community.retool.com/t/cannot-send-emojis-through-forms/3688
https://www.jianshu.com/p/980b243fa2c3