首页 > 解决方案 > 如何让 SQL Server 识别唯一的泰语字符?

问题描述

这是我的桌子:

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

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

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

标签: sql-servertsql

解决方案


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

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

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'លីអូ បៀរ'

推荐阅读