Java / PHP 插入 emoji 資料到 MariaDB

這件事是這樣的,小蛙需要接收一個從 App 過來的表單資料,就在接收後要塞進 MariaDB 的時候,問題就出現了 …

<br>
// 小蛙的訊息不知道跑哪去了,這個訊息從 參考資料1 中 copy 出來的<br>
Error Code: 1366. Incorrect string value: '\xF0\x9F\x92\xA2' for column 'SOURCE_CONTEXT' at row 1<br>

一再檢查要塞入的字串感覺沒有什麼問題,試了好幾次之後才發現 … 原來裡面包含了 emoji 啦!!!

之前跟同事聊天的時候得知,如果要存 emoji 的話要把資料庫的欄位改成 utf8mb4,但是呢 … 小蛙實在不想動太多,參考資料裡有很多解法,有興趣可以去看看。

小蛙這邊只是把要存 emoji 的欄位改成 utf8mb4,然後 … php 一執行,還是噴一樣的錯誤出來,嗯 ~ 這個案情不單純,來慢慢 try ~

<br>
// 單純想把 utf-8 改成 utf8mb4,當然一定是不可行<br>
jdbc:mysql://ip:port/db_name?useUnicode=true&amp;characterEncoding=utf8mb4<br>

試了一些方法之後發現,在 php 的部份連線後,在做任何操作之前先執行

<br>
mysqli_query( $conn, "SET NAMES 'utf8mb4'");<br>

ㄟ ~ 竟然好像貌似就可以了!另一個專案需要用 Java 去剖析並塞入有 emoji 的需求,立馬試試

<br>
ps.executeQuery("SET NAMES 'utf8mb4'");<br>

哦哦哦哦哦哦哦哦哦哦哦哦哦 ~

有很多文章的教學是根本的解決方法,像是把資料庫各項設定都直接改成 utf8mb4,小蛙不想動到太多,試出這方法,最後總結一下:

  1. mysql connector 更新到新版
  2. jdbc:mysql://ip:port/db_name?useUnicode=true&characterEncoding=utf-8&character_set_server=utf8mb4
  3. 建立 Statement 或 PreparedStatement 後就立馬執行 SET NAMES ‘utf8mb4’

以上,希望幫助到有需要的人!

參考資料

  1. utf8mb4 in MySQL Workbench and JDBC – Stack Overflow
  2. Caused by: java.sql.SQLException: Unsupported character encoding ‘utf8mb4’ – Stack Overflow
  3. JDBC and utf8mb4 encoding the emoji symbol 🔥 – Stack Overflow
  4. mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 – CSDN 博客
MySQL / MariaDB 相關文章:

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *