MYSQL BUG:Primary/Unique 上的重复条目。如果我插入单词,单词
MYSQL BUG: Duplicate entry on Primary/Unique. If I insert word , Word
您好,
我尝试使用 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 无法处理大写 vs Small
你能帮帮我吗?*
状态更新
错误不是space,而是大写和小写字母。
这不是错误,而是编码和 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 Workbench.
运行 这个 SQL:
alter table myWords_table change column myWords myWords varchar(250) CHARSET utf8 COLLATE utf8_bin;
有什么想法可以防止将来发生这种情况吗?
吉米的回答:
您可以首先将数据库的排序规则设置为 utf8_bin,然后任何使用默认排序规则创建的 table 都将继承该排序规则
感谢大家的出色工作。你帮了我大忙!!
希腊,
塞布斯蒂安
您好, 我尝试使用 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 无法处理大写 vs Small
你能帮帮我吗?*
状态更新
错误不是space,而是大写和小写字母。
这不是错误,而是编码和 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 Workbench.
运行 这个 SQL:
alter table myWords_table change column myWords myWords varchar(250) CHARSET utf8 COLLATE utf8_bin;
有什么想法可以防止将来发生这种情况吗?
吉米的回答: 您可以首先将数据库的排序规则设置为 utf8_bin,然后任何使用默认排序规则创建的 table 都将继承该排序规则
感谢大家的出色工作。你帮了我大忙!!
希腊,
塞布斯蒂安