【mariadb】Incorrect string value エラー、原因は文字コードではなく文字数オーバーだった

この記事について

環境mariadb + PHP(mysqli)
目的INSERTで出た Incorrect string value エラーを解消する
結果カラムを text → mediumtext に変更して解決

事象

mariadbにインサートできなかった。エラー内容:

Uncaught mysqli_sql_exception: Incorrect string value: '\xE9\xA1\x94,\xE9\xAC...' for column ......

原因

このエラーが出た場合、真っ先に疑うのは文字コードだが、今回は文字数オーバーだった。

文字数制限に引っかかってマルチバイト文字が途中で切り捨てられたのが原因のようだ。

対処

mariadb のカラムに設定してある text を mediumtext に変更したらエラーが出なくなった。

ALTER TABLE テーブル名 MODIFY カラム名 MEDIUMTEXT;

補足

  • textは最大65,535バイト、mediumtextは最大16MB。上限で切り捨てられる際にマルチバイト文字の途中でぶった切られると、不正なバイト列になってこのエラーになる
  • このエラーの定番原因はやはり文字コード。utf8(=utf8mb3)のカラムに絵文字などの4バイト文字を入れた場合も同じエラーが出る。その場合は utf8mb4 に変更する
  • 切り分けの目安:短い文字列でも出るなら文字コード、長文のときだけ出るならサイズ超過を疑う
タイトルとURLをコピーしました