■ mysqlのSQLモードで困ってた話 2022-05-16
こんにちは、紅茶ネコです。
先月ぐらいにmysqlのテーブルにデータを追加するAPIを作ることがあり、テストをする際に「カラムに指定した文字数より大きい文字数の文字列が送信された場合、500エラーを返すこと」についても確認をしたのですが、エラーにならず200(正常終了)を返してくれました。
どういうわけなのか追加されたデータを確認したところ、文字列が勝手に切り詰められて、問題のカラムには指定した文字数分の文字列だけが入っておりました。
とても優しい仕様ではありますが、エラーになってもらわないと困るので色々調べてみたところ、「MYSQL 文字数オーバーのエラーが出力されない場合」という記事を発見。
インストールされているmysqlの「sqlモード」を確認してみたら、確かに文字数制限にかかわる「STRICT_ALL_TABLES」というのがありませんでした。
mysqlをインストールした方に話してみたのですがそういうのがあるのも知らなかったとおっしゃっていたので、デフォルトでは切り詰め仕様になるのだと思います。
後から変更することもできますが、知らないうちに切り詰められてはいけない文字が切れた状態で入っていると大変なことになるため、要注意ですね。
上に載せた記事にある「SQLモード」についてのURLはもうアクセスできないようで、最新のマニュアルはこちらになります。
様々なモードがあり、最初は「TRADITIONAL 」を設定することを検討してみましたが、今回は文字数制限でちゃんと止めてほしいだけだったため、「STRICT_ALL_TABLES」のみを追加することにしました。
同じ現象で悩まされている方がいらっしゃいましたら、参考にしていただけると嬉しいです。
以上、紅茶ネコでした!