2013-08-27 10 views
21

私は2つのMySQLインスタンスを持っています。データが長すぎる場合、最初の文字列は挿入時に文字列を切り捨てます。第二1でエラーが発生します:MySQLが長すぎますvarchar切り捨て/エラー設定

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

私は第二1は、同様のデータを切り捨てるたいです。 この動作を管理するMySQLの設定はありますか?

+1

ファイルタイプ&列の長さは何ですか?あなたは同じ値を持っていますか?両方のサーバで同じファイルがありますか? –

+0

@ metalfight-user868766ファイルタイプに関するご質問がありません。エンジンはInnoDB、列型 - varcharです。列の長さは変化しません。そして、はい、データベースはほぼ同じです。 –

+0

どのようなエラー? – 7alhashmi

答えて

28

STRICT_TRANS_TABLESSTRICT_ALL_TABLESを無効にすることができます。これにより、挿入された文字列を自動的に切り捨てることができます。

MySQL Documantationからの引用

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

参考:MySQL Server SQL Modes

+0

これは私の問題への答えです –

+0

BTW - 以下のメソッドは有効とはみなされるべきではありません - あなたのmy.cnfにSQLモードを設定する必要がありますが、NO_AUTO_CREATE_USERやその他のものは必要ありません。 STRICT_TRANS_TABLESまたはSTRICT_ALL_TABLES、またはこの警告を伝えるその他のものがないことを確認するだけです。実際にはsql-mode = ''もエラーを修正します。 – Ross

9

厳密なSQLモードが有効になっておらず、列の最大長を超える値をCHARまたはVARCHAR列に割り当てると、値が切り捨てられて警告が生成されます。スペース以外の文字を切り捨てる場合は、警告ではなくエラーが発生し、厳密なSQLモードを使用して値の挿入を抑制できます。 6.1.7項「サーバーのSQLモード」を参照してください。あなたはそれを変更するにはどうすればよい

:strictモードを無効にするには二つの方法が見つかり http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


  1. SQLモード= "NO_AUTO_CREATE_USERをmy.cnfファイルには、以下の追加、NO_ENGINE_SUBSTITUTION "

  2. wayはmysql consoleを使用しています。

    SET @@ global.sql_mode = '';

実稼働環境で実行する前にテストしてください。

+0

SET @@ global.sql_mode = '';魅力として働いた –

1

あなたがcPanelのを使用している場合、

/usr/my.cnf

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

を置き換えます

sql-mode="" 

実行

/etc/init.d/mysql restart 
関連する問題