2つのMySQLインスタンスがあります。 1つ目は、データが長すぎる場合に挿入時に文字列を切り捨てます。 2番目のものはエラーを発生させます:
ERROR 1406 (22001): Data too long for column 'xxx' at row 1
2番目のものもデータを切り捨てます。この動作を管理するためのMySQL設定はありますか?
STRICT_TRANS_TABLES
およびSTRICT_ALL_TABLES
を無効にできます。これにより、挿入された文字列の自動切り捨てが可能になります。
MySQL Documantationからの引用。
厳密モードは、MySQLがINSERTやUPDATEなどのデータ変更ステートメントの無効な値や欠損値を処理する方法を制御します。値はいくつかの理由で無効になる場合があります。たとえば、列のデータ型が間違っているか、範囲外である可能性があります。挿入する新しい行に、定義に明示的なDEFAULT句がないNULL以外の列の値が含まれていない場合、値が欠落しています。 (NULL列の場合、値が欠落しているとNULLが挿入されます。)
リファレンス: MySQL Server SQLモード
厳密なSQLモードが有効になっておらず、列の最大長を超える値をCHARまたはVARCHAR列に割り当てると、値が収まるように切り捨てられ、警告が生成されます。スペース以外の文字の切り捨ての場合、(警告ではなく)エラーを発生させ、厳密なSQLモードを使用して値の挿入を抑制することができます。セクション6.1.7「サーバーSQLモード」を参照してください。
変更方法: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
厳格モードを無効にする2つの方法を見つけました。
my.cnfに以下を追加します
sql-mode = "NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION"
方法はmysqlコンソールを使用しています。
SET @@ global.sql_mode = '';
実稼働環境で実行する前にテストしてください。
cpanelを使用する場合、
取り替える
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
/usr/my.cnfに
に
sql-mode=""
走る
/etc/init.d/mysql restart