当我尝试使用 0123456789 进行更新时,MySQL 更新似乎使用 2147483647 的幻数进行了更新。
在某个地方,MySQL 似乎在任何模式的 INT 列上将一个数字与另一个数字相关联。我什至在哪里寻找这样的关联。详情如下。
此更新执行了预期的操作,并将 012345678 输入到相应行的 ContactPhone2 列中。
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 Works,所以它不是数字的长度。
这发生在整个数据库中具有 INT(10+) 的任何列上,但不会发生在 VARCHAR 列上。
更好的是,它在另一个名为thedesignge的模式上做同样的事情,该模式是旧模式,后来被复制和重命名,但它在 mysql 中仍然有效,尽管未使用。
列上没有运行任何触发器,并且只有一个触发器在 ContactID 列上的表上运行。也没有给出错误。
查询一般都是通过 MySQL 工作台进行的,虽然我试过一次在终端直接通过 shell 进入更新查询,得到了相同的结果。
在某个地方,MySQL 似乎在任何模式的 INT 列上将一个数字与另一个数字相关联。我什至在哪里寻找这样的关联。
我们还没有对缓存或索引做任何事情,除了 MySQL 默认的。我们正在运行 mysql 5.5.29