【问题标题】:Update fails for a particular Unicode character特定 Unicode 字符的更新失败
【发布时间】:2017-03-09 21:16:38
【问题描述】:

我是一名 SQL Server DBA,我收到了一个非常奇怪的投诉,即 UPDATE 语句失败。

create table #temp(id int, c nvarchar(10))
alter table #temp add constraint check_empty check (isnull(c,'')<>'')

insert into #temp values(1,N'ABC') --Success

update #temp set c=N'䬠䏊' where id=1 --Fail
update #temp set c=N'䬠䏊.' where id=1 --Success

insert into #temp values(2,N'䬠䏊') --Fail
insert into #temp values(2,N'䬠䏊.') --Success

我有一个带有NVARCHAR 列的表,并且该列上还有一个CHECK 约束。当我通过将. 附加到字符串来更新它时,它会成功。我尝试用谷歌搜索,但没有找到任何相关内容。

提前致谢!

【问题讨论】:

    标签: sql-server tsql unicode sql-server-2012


    【解决方案1】:

    正如这篇文章所说的Link,这是由排序规则问题引起的,你可以做的是按照SQL Server PM所说的设置排序规则:

    如果您对大多数语言环境 (SQL_Latin1_general_CP1_CI_AS) 使用默认排序规则,您所看到的行为实际上是设计使然。

    一般来说,我建议在实例或数据库级别使用 Windows 排序规则,例如 Latin1_general_100_CI_AS_KS_WS。

    并从以下位置更改您的代码:

    alter table #temp add constraint check_empty check (isnull(c,'')<>'')
    

    到:

    alter table #temp add constraint check_empty check (isnull(c,'') collate Latin1_general_100_CI_AS_KS_WS <>'')
    

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 2013-05-26
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2019-04-26
      • 2018-08-19
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多