Mysqlに文章をInsertしたときに、どうしても文章の途中でデータがバッサリ切れてしまう現象に遭遇しました。max_allow_packetに引っかかっているわけでもなく、カラムのデータ長の限界を超えているわけでもなく、エラーが出るわけでもなく。無言でデータがぶった切られていたのです。結構ハマったので、備忘録として残しておきます。
■原因は絵文字
原因は絵文字でした。mysqlの対象のカラムがUtf8mb4になっていないと絵文字が現れた時点で、絵文字の後ろの文字列がすべて消される仕様になっているようです。絵文字は4バイトのUTF-8コードです。ただのutf8の文字コードだと、不正コードとして扱われてしまうみたいですね。
少し古い投稿ですが、以下の記事に原因が書いてありました。
mysql:13823
■対応
今回は、対象のカラムの文字コードをUtf8mb4に変更して対応しました。
UTF-8になって、文字コードの問題が減ってきたと思ったら、UTF-8でも問題が出るようになってきましたね。文字コードの問題は地味にデータロストの危険性が大きいので、気をつけましょう。
では。