MySQL の更新は、0123456789 で更新しようとすると、マジック ナンバー 2147483647 で更新されるようです。
どこかで、MySQL は任意のスキーマの INT 列である数値を別の数値に関連付けているようです。そのような協会をどこで探すのでしょうか。詳細は以下の通りです。
この更新は、想定どおりの動作を行い、適切な行の ContactPhone2 列に 012345678 を入力します。
UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='012345678' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
この更新は、実際には、適切な行の ContactPhone2 列の 2147483647 に入力されます。0123456789 とはかけ離れています。
UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='0123456789' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
ContactPhone2 のデータ型は INT(10) で、デフォルト値は NULL で、パラメーターは設定されていません (OK、NN、AI など)。これは MYSQL の一般的なログからのものです。012345678 更新の場合。
130101 17:51:43 89 Query set autocommit=0
130101 17:51:44 89 Prepare UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='012345678' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
89 Execute UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='012345678' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
89 Query commit
89 Close stmt
そして、0123456789 更新のログ エントリ。
130101 17:51:48 89 Query set autocommit=0
130101 17:51:49 89 Prepare UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='0123456789' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
89 Execute UPDATE `alacarte`.`customercontacts` SET `ContactPhone2`='0123456789' WHERE `CustomerID`='cust-000004' and`ContactID`='1'
89 Query commit
89 Close stmt
0123456780 で更新するとうまくいきますので、桁数ではありません。
これは、INT(10+) を持つデータベース全体の任意の列で発生しますが、VARCHAR 列では発生しません。
さらに良いのは、コピーして名前を変更した古いスキーマであるthedesignedgeと呼ばれる別のスキーマで同じことを行うことですが、使用されていませんが、まだ mysql でアクティブです。
列で実行されているトリガーはなく、ContactID 列のテーブルで実行されているトリガーは 1 つだけです。エラーも出ません。
クエリは通常、MySQL ワークベンチを介して作成されていますが、ターミナルのシェルを介して更新クエリを直接入力しようとしたことがあり、同じ結果が得られました。
どこかで、MySQL は任意のスキーマの INT 列である数値を別の数値に関連付けているようです。そのような協会をどこで探すのでしょうか。
MySQL のデフォルト設定を除けば、キャッシングやインデックス作成についてはまだ何もしていません。mysql 5.5.29 を実行しています