MySQL / phpMyAdmin 在没有出现口是心非的情况下在 UNIQUE 列上抛出口是心非的错误
MySQL / phpMyAdmin throws duplicity error on UNIQUE column when no duplicity occurs
我有以下 table:
CREATE TABLE pret_user (
pret_user_index INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
pret_user_fname VARCHAR(250) NOT NULL,
pret_user_lname VARCHAR(250) NOT NULL,
pret_user_email VARCHAR(250) NOT NULL,
pret_user_telegram_subscribe_token_hash VARCHAR(64) UNIQUE,
pret_user_telegram_subscribe_token_hash_valid_until INT(15),
pret_user_telegram_chat_id INT(15) UNIQUE,
pret_user_telegram_subscribed TINYINT(1) NOT NULL DEFAULT 0
);
当我尝试手动更新 pret_user_telegram_chat_id
的值时,即使没有具有相同值的值(table只有 4 行,所以我手动检查)。我还注意到,当我尝试将值设置为 5163196961
时,警告是关于值 2147483647
的。任何关于可能导致此问题的想法将不胜感激!
SQL:
UPDATE `d28748_admin`.`pret_user`
SET `pret_user_telegram_chat_id` = '5163196931`
WHERE `pret_user`.`pret_user_index` = 2
错误:
#1062 - Duplicate entry '2147483647' for key 'pret_user_telegram_chat_id'
为了解决这个问题,我暂时将列切换为 VARCHAR,之后问题就消失了,但我真的很想弄清楚为什么会发生这种情况,以防我遇到类似的问题将来。
您的 pret_user_telegram_chat_id 太小了。 The max value for INT is 2147483647,即使您指定了 15 个地点。你会想要 BIGINT 来代替
我有以下 table:
CREATE TABLE pret_user (
pret_user_index INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
pret_user_fname VARCHAR(250) NOT NULL,
pret_user_lname VARCHAR(250) NOT NULL,
pret_user_email VARCHAR(250) NOT NULL,
pret_user_telegram_subscribe_token_hash VARCHAR(64) UNIQUE,
pret_user_telegram_subscribe_token_hash_valid_until INT(15),
pret_user_telegram_chat_id INT(15) UNIQUE,
pret_user_telegram_subscribed TINYINT(1) NOT NULL DEFAULT 0
);
当我尝试手动更新 pret_user_telegram_chat_id
的值时,即使没有具有相同值的值(table只有 4 行,所以我手动检查)。我还注意到,当我尝试将值设置为 5163196961
时,警告是关于值 2147483647
的。任何关于可能导致此问题的想法将不胜感激!
SQL:
UPDATE `d28748_admin`.`pret_user`
SET `pret_user_telegram_chat_id` = '5163196931`
WHERE `pret_user`.`pret_user_index` = 2
错误:
#1062 - Duplicate entry '2147483647' for key 'pret_user_telegram_chat_id'
为了解决这个问题,我暂时将列切换为 VARCHAR,之后问题就消失了,但我真的很想弄清楚为什么会发生这种情况,以防我遇到类似的问题将来。
您的 pret_user_telegram_chat_id 太小了。 The max value for INT is 2147483647,即使您指定了 15 个地点。你会想要 BIGINT 来代替