Java / PHP 插入 emoji 資料到 MariaDB

Java 跟 PHP 新增 emoji 字串進去 MySQL / MariaDB 資料庫的時候發生錯誤?這篇可以幫助你喔!

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

Error Code: 1366. Incorrect string value: '\xF0\x9F\x92\xA2' for column 'SOURCE_CONTEXT' at row 1

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

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

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

jdbc:mysql://ip:port/db_name?useUnicode=true&characterEncoding=utf8mb4

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

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

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

ps.executeQuery("SET NAMES 'utf8mb4'");

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

有很多文章的教學是根本的解決方法,像是把資料庫各項設定都直接改成 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 博客

發佈留言

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