Java / PHP 插入 emoji 資料到 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,小蛙不想動到太多,試出這方法,最後總結一下:
- mysql connector 更新到新版
- jdbc:mysql://ip:port/db_name?useUnicode=true&characterEncoding=utf-8&character_set_server=utf8mb4
- 建立 Statement 或 PreparedStatement 後就立馬執行 SET NAMES ‘utf8mb4’
以上,希望幫助到有需要的人!
參考資料
- utf8mb4 in MySQL Workbench and JDBC – Stack Overflow
- Caused by: java.sql.SQLException: Unsupported character encoding ‘utf8mb4’ – Stack Overflow
- JDBC and utf8mb4 encoding the emoji symbol ? – Stack Overflow
- mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 – CSDN 博客
MySQL / MariaDB / Oracle 相關文章: