Sql 表列上的唯一约束
我有一个表(一个包含数据的现有表),该表有一个列用户名。 我希望这个用户名是唯一的。 因此,我添加了一个如下约束:Sql 表列上的唯一约束,sql,sql-server,constraints,diacritics,unique-key,Sql,Sql Server,Constraints,Diacritics,Unique Key,我有一个表(一个包含数据的现有表),该表有一个列用户名。 我希望这个用户名是唯一的。 因此,我添加了一个如下约束: ALTER TABLE Users ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName]) 现在,我不断得到这个表中存在重复用户的错误。 但我已使用以下查询检查了数据库: SELECT COUNT(UserId) as NumberOfUsers, UserName FROM Users
ALTER TABLE Users
ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName])
现在,我不断得到这个表中存在重复用户的错误。
但我已使用以下查询检查了数据库:
SELECT COUNT(UserId) as NumberOfUsers, UserName
FROM Users
GROUP BY UserName, UserId
ORDER BY UserName
这将产生一个用户列表,所有用户的NumberOfUsers都是1。所以那里没有重复的。
但当我检查用户名时,他失败了,我看到以下结果:
beluga
béluga
所以很明显,他没有比较“e”和“é”或“è”。。。就好像他忽略了这些,sql有没有办法在添加唯一的密钥约束时不忽略这些重音呢
解决方案:
谢谢你们,我找到了解决办法。
这解决了问题:
ALTER TABLE Users
ALTER COLUMN UserName nvarchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS
比较时,您使用的排序规则很可能会忽略大小写和重音。您需要更改排序规则
忽略大小写和重音Latin1\u General\u CI\u AI
不会忽略重音Latin1\u General\u CI\u AS
SQL server排序规则名称列表。比较时,您使用的排序规则很可能忽略大小写和重音。您需要更改排序规则
忽略大小写和重音Latin1\u General\u CI\u AI
不会忽略重音Latin1\u General\u CI\u AS
SQL server排序规则名称列表。正如Andrew Barrett所说,MySQL中的默认排序规则无法正确识别重音 将字段的排序规则更改为
UTF8\u unicode\u ci
,它应该可以正确地看到重音符号
ci表示不区分大小写,如果大小写很重要,可以使用不同的排序规则
您可以使用新的排序规则创建一个新表,然后将*从现有表复制到新表。正如Andrew Barrett所说,MySQL中的默认排序规则无法正确识别重音 将字段的排序规则更改为
UTF8\u unicode\u ci
,它应该可以正确地看到重音符号
ci表示不区分大小写,如果大小写很重要,可以使用不同的排序规则
您可以使用新的排序规则创建一个新表,然后将*从现有表复制到新表中。您的查询组也可以通过UserID进行复制-您不想这样做 使用: 您的查询将只显示具有相同名称和相同用户ID的用户。或者,可能按
COUNT(*)
对数据排序,因此显示的最后一行很可能是麻烦制造者
正如其他人所建议的那样,您也可能在排序方面存在问题,但通常情况下,GROUPBY是自一致的。您的查询组也是按用户ID进行的-您不想这样做 使用: 您的查询将只显示具有相同名称和相同用户ID的用户。或者,可能按
COUNT(*)
对数据排序,因此显示的最后一行很可能是麻烦制造者
正如其他人所建议的那样,您也可能在排序方面存在问题,但通常情况下,GROUPBY是自一致的。假定UserId是您的主键。因为它是分组依据的一部分,所以保证每个组只获得一行。将“userId”列从您的组中删除。假定userId是您的主键。因为它是分组依据的一部分,所以保证每个组只获得一行。将“userId”列从您的组中删除。还请注意,您还可以创建您感兴趣的相关排序规则表(而不是服务器范围的表)。因此,您还可以执行以下操作:
CREATE TABLE Users (c1 varchar (10), .., COLLATE Latin1_General_CI_AS NULL )
还要注意的是,您也可以只创建对相关排序规则感兴趣的表(而不是服务器范围的表)
CREATE TABLE Users (c1 varchar (10), .., COLLATE Latin1_General_CI_AS NULL )
这似乎是数据库排序的问题。它设置为什么排序规则?这似乎是数据库排序规则的问题。它设置为什么排序规则?