MYSQL BUG:主要/唯一上的重复条目。如果我插入单词,Word

时间:2015-11-04 16:16:25

标签: php mysql duplicates mysql-error-1062

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

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不是空间,它是Capital和小写字母。

2 个答案:

答案 0 :(得分:0)

这不是一个错误,而是编码和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'

答案 1 :(得分:-1)

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

MYSQL糟糕的MYSQL Workbench。

运行此SQL:

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

任何想法如何防止未来发生这种情况?

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

谢谢大家这项出色的工作。你帮了我很多!!

希腊的,

Sebstian