具有一个空格差异的两个记录的Mariadb唯一约束错误(重复条目)

时间:2017-06-14 04:22:50

标签: sql mariadb

Mariadb是版本10.0.23 我使用下面的脚本进行测试

create table test(
username varchar(30)
,constraint UK_TEST unique (username);

insert into test values('name1');
1 row inserted.

insert into test values ('name1 ');

第二个插入错误,错误消息是

  

重复'UK_TEST'的重复输入'name1',

突出显示,第二个与第一个不同,值后缀中还有一个空格

有没有人可以帮我解决这个问题?

3 个答案:

答案 0 :(得分:3)

根据the documentation,对于VARCHAR和其他几种数据类型,在比较中忽略尾随空格,包括用于唯一约束的那些:

  

目前,所有MariaDB排序规则都是PADSPACE类型,这意味着   VARCHAR(以及CHAR和TEXT值)在不加考虑的情况下进行比较   用于尾随空格。这不适用于LIKE模式匹配   运算符,它考虑了尾随空格。

     

如果唯一索引包含尾随填充字符的列   被剥离或忽略,插入到值不同的列中   只有通过尾随填充字符的数量才会产生一个   重复键错误。

答案 1 :(得分:1)

您已标记"用户名"字段为" UNIQUE"。因此,它只接受整个列中的唯一值。您正在尝试插入重复的值。

https://dev.mysql.com/doc/refman/5.7/en/constraint-primary-key.html

了解详情

答案 2 :(得分:1)

当数据库中的用户名设置为“UNIQUE”或设置为“PRIMARY KEY”时,会遇到此类问题。在您的情况下,它是唯一,因此您不能有两行共享相同的用户名,这是非常逻辑和正确的。

我建议你在继续前进之前阅读有关mysql的更多信息。

请在此处详细了解主要键约束:https://dev.mysql.com/doc/refman/5.7/en/constraint-primary-key.html