SQLモード「STRICT_TRANS_TABLES」を無効にする

MariaDB 10.2.4以降では、STRICT_TRANS_TABLESというテーブルの行に厳密な型の値のみを許可するというモードが有効になっています。

これを無効にするには、sql_modeのSTRICT_TRANS_TABLESの値を削除してください。

[mysqld]

# 変更前
sql_mode="STRICT_TRANS_TABLES,他の値"

# 変更後
sql_mode="他の値"

MariaDBのバージョンアップ時の注意

MariaDB 10.2.4以降では、STRICT_TRANS_TABLESというテーブルの行に厳密な型の値のみを許可するというモードが有効になっています。

以下のようなエラーが発生した場合は、STRICT_TRANS_TABLESが有効になっていることが原因です。

DBD::mysql::st execute failed: Incorrect integer value: '無料' for column `kimotosystem`.`book`.`price` at row 1. Following SQL is executed.

元のMariaDBの動作を持たせたい場合は、STRICT_TRANS_TABLESを無効にしましょう。

不正な値を完全にはじきたいか、insertを失敗させたくないか

SQLモードの、この値は、プロジェクトの要件によって、不正な値を完全にはじきたいか、あるいは、insertを失敗させたくないかという観点で決めると良いと思います。

Perlの場合がプログラミング言語の型が緩やかなので、STRICT_TRANS_TABLESが有効になっていると、insertがエラーで終了しやすくなるという感じはあります。

関連情報