MYSQL BUG:在Primary/Unique上有重复条目.如果我插入单词,单词


MYSQL BUG: Duplicate entry on Primary/Unique. If I insert word , Word

嗨,我尝试用PHP在数据库中插入两个不同的单词

word <= *is the first*
Word <= *is the secound

创建代码:

CREATE TABLE `myWords_table` (
    `myWords` VARCHAR(250) NOT NULL,
    PRIMARY KEY (`myWords`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB

SQL:

INSERT INTO myWords_table (myWords) VALUES ("word"),("Word")
ALSO to better show:
 INSERT INTO myWords_table (myWords) VALUES ("word"),("WORD")
Error: Duplicate entry 'word' for key 'PRIMARY' 

*我还试过Unique Key。MYSQL似乎无法处理资本与小型

你能帮我吗?*

状态更新

ERROR不是空格,而是大写字母和小写字母。

这不是一个bug,而是编码和mysql的工作方式。这完全取决于您对Key列使用的编码,有些编码区分大小写,有些编码不区分大小写。在您的案例中,utf8_general_ci不区分大小写,这意味着出于比较目的,word=word=word=。。。

如果您使用utf8_bin编码,则不应该发现这种行为。根据以下脚本

CREATE TABLE `myWords_table` (
    `myWords` VARCHAR(250) NOT NULL,
    PRIMARY KEY (`myWords`)
)
COLLATE='utf8_bin'
ENGINE=InnoDB;
Query OK, 0 rows affected (0.80 sec)
INSERT INTO myWords_table (myWords) VALUES ("word"),("Word");
Query OK, 2 rows affected (0.09 sec)
select * from myWords_table;
+---------+
| myWords |
+---------+
| Word    |
| word    |
+---------+

相反,当您使用utf8_general_ci 时

CREATE TABLE `myWords_table` (
    `myWords` VARCHAR(250) NOT NULL,
    PRIMARY KEY (`myWords`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
Query OK, 0 rows affected (0.37 sec)
INSERT INTO myWords_table (myWords) VALUES ("word"),("Word");
ERROR 1062 (23000): Duplicate entry 'Word' for key 'PRIMARY'

感谢Jimmy的回答和所有帮助我的人。

MYSQL坏的MYSQL工作台。

运行此SQL:

alter table myWords_table change column myWords myWords varchar(250) CHARSET utf8 COLLATE utf8_bin;

有什么想法可以防止未来发生这种情况吗?

吉米的回答:您可以将数据库的排序规则设置为utf8_bin,然后任何使用默认排序规则创建的表都将继承该排序规则

感谢大家所做的伟大工作。你帮了我很多!!

贪婪,

Sebstian