Php MYSQL错误:主/唯一上存在重复条目。如果我插入单词,单词

Php MYSQL错误:主/唯一上存在重复条目。如果我插入单词,单词,php,mysql,duplicates,mysql-error-1062,Php,Mysql,Duplicates,Mysql Error 1062,嗨, 我尝试用PHP在数据库中插入两个不同的单词 SQL: *我还尝试了独特的关键。 MYSQL似乎无法处理资本与小规模的竞争 你能帮帮我吗* 状态更新 错误不在于空格,而在于大写和小写字母 这不是一个bug,而是编码和mysql的工作原理。这完全取决于您对键列使用的编码,有些编码区分大小写,有些则不区分大小写。在您的例子中,utf8\u general\u ci不区分大小写,这意味着出于比较目的,word=word=word= 如果您使用utf8\u-bin编码,您不应该发现这种行为。按照下面

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

SQL:

*我还尝试了独特的关键。 MYSQL似乎无法处理资本与小规模的竞争

你能帮帮我吗*

状态更新


错误不在于空格,而在于大写和小写字母

这不是一个bug,而是编码和mysql的工作原理。这完全取决于您对键列使用的编码,有些编码区分大小写,有些则不区分大小写。在您的例子中,utf8\u general\u ci不区分大小写,这意味着出于比较目的,word=word=word=

如果您使用utf8\u-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\u general\u 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'

这不是一个bug,而是编码和mysql的工作原理。这完全取决于您对键列使用的编码,有些编码区分大小写,有些则不区分大小写。在您的例子中,utf8\u general\u ci不区分大小写,这意味着出于比较目的,word=word=word=

如果您使用utf8\u-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\u general\u 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'

谢谢吉米的回答和所有帮助我的人

MYSQL坏MYSQL工作台

运行以下SQL:

alter table myWords_table change column myWords myWords varchar(250) CHARSET utf8 COLLATE utf8_bin;
有什么办法可以防止将来发生这种情况

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

谢谢你们所有人的伟大工作。你帮了我这么多

格里斯


塞巴斯蒂安

感谢吉米的回答和所有帮助我的人

MYSQL坏MYSQL工作台

运行以下SQL:

alter table myWords_table change column myWords myWords varchar(250) CHARSET utf8 COLLATE utf8_bin;
有什么办法可以防止将来发生这种情况

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

谢谢你们所有人的伟大工作。你帮了我这么多

格里斯



Sebstian

无法重新创建您的案例这正是SQL查询执行时读取的内容吗?您没有首先通过清除多余空格的清理函数运行变量?您确定没有执行insert语句两次,和/或在insert之前没有包含这些值的行吗@lad2025看起来像是您发现了一个具有FIDLE输出的错误,因为它在行输出中丢失了额外的空间。@JRD这不是错误,tab或newline之类的空白也不会显示。另见。如果您认为它不是一个bug特性,请随时通知SQLFIDLE/SEDE创建者:)也许,这取决于您如何看待它,它是一个bug/特性。它没有显示数据库中的值,这是需要注意的。无法重新创建您的案例这正是SQL查询执行时读取的内容吗?您没有首先通过清除多余空格的清理函数运行变量?您确定没有执行insert语句两次,和/或在insert之前没有包含这些值的行吗@lad2025看起来像是您发现了一个具有FIDLE输出的错误,因为它在行输出中丢失了额外的空间。@JRD这不是错误,tab或newline之类的空白也不会显示。另见。如果您认为它不是一个bug特性,请随时通知SQLFIDLE/SEDE创建者:)也许,这取决于您如何看待它,它是一个bug/特性。它没有显示数据库中的值,这是需要注意的。不,这是错误的。我将编码更改为utf8_bin,并从上面输入了SQL,但仍然存在此问题。创建TABLE
myWords\u TABLE
myWords
VARCHAR(250)不为空,主键(
myWords
))COLLATE='utf8\u bin'ENGINE=InnoDBI我相信您没有正确地测试它,我很有信心这是您的问题。我刚刚测试了它,它就像我说的那样工作。我在MYSQL WOrkbench中查找,这是创建代码创建表
myWords\u TABLE
myWords
varchar(250)字符集utf8 NOT NULL,主键(
myWords
))引擎=InnoDB默认字符集=utf8 COLLATE=utf8\u bin;查询中涉及两种排序规则:表排序规则和列排序规则。在本例中,您将表排序规则设置为utf8\u bin,列排序规则设置为utf8,默认为标准排序规则(我认为是utf8\u general\u ci)。在WorkBench中选择“myWords”列,然后在您可以看到其详细信息的下方,选择该列的排序规则为utf8\u bin。不是表的排序规则。创建表myWords\u表(myWords varchar(250)字符集utf8 COLLATE utf8\u bin NOT NULL,…我尝试更改它。我在我的表格上看到排序规则:utf-utf8\u bin。然后我单击myWords,在详细信息上看到utf8-默认排序规则,然后单击下拉菜单并选择utf-utf8\u bin。按应用,我在日志上没有检测到任何更改。我尝试了插入,结果确实如此nt工作。有什么想法吗?没有,这是错误的。我将编码更改为utf8\u-bin并从上面输入SQL,仍然存在此问题。创建表
myWords\u表
myWords
VARCHAR(250)非空,主键(
myWords
)COLLATE='utf8_-bin'ENGINE=Innodb我相信你没有正确地测试这个,我很有信心这是你的问题。我刚刚测试了它,它就像我说的那样工作。我在MYSQL工作台上查了一下,那是创建代码创建表
myWords_表
myWords
varchar(250)字符集utf8 NOT NULL,主键(
myWords
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8\u bin;查询中涉及两种排序规则,表排序规则和列排序规则。在您的示例中,您将表排序规则设置为utf8\u bin,列排序规则设置为co