为什么我的MySQL唯一密钥失败了?

时间:2012-06-22 21:30:18

标签: mysql unique-index

INSERT INTO `ree`.`media` 
(`CREATEDATE`, `FILETYPE`, `MIMETYPE`, `MLSNUMBER`, `MODIFYDATE`, `POSITION`, `URL`) VALUES 
('2011-12-27T15:00:16', 'PRIMARY PHOTO', 'image/jpeg', 5030011414, '2011-12-27T15:00:16', 1, 'http://image.realcomponline.com/photos.rps?PATH=PROPERTY/57FA/57FAA44C48854C/3QQGONGA03I7CN.jpg&g=100&sp=0&l=0&t=0&r=10000&b=10000&o=0&1cf=0&w=320&h=240'),
('2011-12-27T15:00:18', 'PRIMARY PHOTO', 'image/jpeg', 5030011507, '2011-12-27T15:00:18', 1, 'http://image.realcomponline.com/photos.rps?PATH=PROPERTY/6FC7/6FC7B6F88D8F45/3SQGONGA01RXH1.jpg&g=100&sp=0&l=0&t=0&r=10000&b=10000&o=0&1cf=0&w=320&h=240')

错误: 关键'uneek'的重复条目'2147483647-1'

在区分两个插入符之前,似乎我的MLSNUMBER的UNIQUE键没有解析整个数字。

两者都以5030011开始...

以下是我构建密钥的方法: ADD UNIQUE uneekMLSNUMBERPOSITION

有没有办法构建这个密钥,所以它接受整个10位而不是前7位?

提前致谢!

2 个答案:

答案 0 :(得分:5)

你的int范围已经用完了。 2147483647 = 2 ^ 31 - 1 您可以在该字段上将此int更改为例如64位:

ALTER TABLE media MODIFY COLUMN MLSNUMBER BIGINT NOT NULL;
(Modify unsigned and not null for your needs).

答案 1 :(得分:4)

您似乎已将MLSNUMBER列定义为Integer类型,并且大值将被截断为最大32位有符号值,即2147483647。

我通过尝试将值5030011507添加到Int列来验证这一点,并且最终存储了值2147483647.这与错误消息中的数字匹配。当值被截断时,我也收到了警告。

您可以尝试将列类型更改为BIGINT,这将允许值最大为9223372036854775807.