【问题标题】:How to make SQL server recognize unique Thai characters?如何让 SQL Server 识别唯一的泰语字符?
【发布时间】:2021-07-25 21:21:18
【问题描述】:

这是我的桌子:

 id      name
 1     ទឹក កាបូន 
 2     លីអូ បៀរ 
 3     ស្របៀរ ២៤ 
 4     ស្រាបៀរ ឌ្រាប់ 

当我使用以下语句查询时:SELECT * FROM t1 WHERE name = N'លីអូ បៀរ',它返回所有行。这很奇怪,因为这些泰语字符不同。

此外,如果我将名称列设为唯一,这将导致问题。有没有人遇到同样的问题,有什么可能的解决方法?我尝试更改排序规则,但仍然无济于事。

【问题讨论】:

  • 尝试将排序规则更改为什么,以及如何?创建表后,如果不重新创建表,则无法更改列的排序规则。值得注意的是,更改数据库排序规则对现有对象没有影响,只会影响文字的比较方式。
  • 请编辑您的问题以包含表的架构。

标签: sql-server tsql


【解决方案1】:

如何让 SQL Server 识别唯一的泰语字符?

Bing 翻译将这些字符识别为高棉语,而不是泰语。因此,您需要为这些字符选择具有特定语言规则的排序规则,例如

drop table if exists t1

create table t1(id int, name nvarchar(200) collate Khmer_100_CI_AI )

insert into t1(id,name)
values (1, N'ទឹក កាបូន'),(2, N'លីអូ បៀរ'),(3, N'ស្របៀរ ២៤'),(4, N'ស្រាបៀរ ឌ្រាប់')

SELECT * FROM t1 WHERE name = N'លីអូ បៀរ'

或者使用二进制排序规则,它只是通过它们的代码点值来比较字符。例如

drop table if exists t1

create table t1(id int, name nvarchar(200) collate Latin1_General_100_BIN2 )

insert into t1(id,name)
values (1, N'ទឹក កាបូន'),(2, N'លីអូ បៀរ'),(3, N'ស្របៀរ ២៤'),(4, N'ស្រាបៀរ ឌ្រាប់')

SELECT * FROM t1 WHERE name = N'លីអូ បៀរ'

即使是一些较新的拉丁排序规则也可以使用,例如

drop table if exists t1

create table t1(id int, name nvarchar(200) collate Latin1_General_100_CI_AI )

insert into t1(id,name)
values (1, N'ទឹក កាបូន'),(2, N'លីអូ បៀរ'),(3, N'ស្របៀរ ២៤'),(4, N'ស្រាបៀរ ឌ្រាប់')

SELECT * FROM t1 WHERE name = N'លីអូ បៀរ'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多