在子句中使用T逗号(Ț)

时间:2019-10-09 08:18:04

标签: sql-server tsql

我在SQL Server数据库中有一条用户记录,其姓氏带有重音符号。名称为ȚÎRA,即T逗号(U + 021A),I-抑扬符号(U + 00CE),R和A。

不管我尝试什么,我都无法弄清楚如何搜索那个名字和那个名字。以下是一些详细信息以及我尝试过的操作:

Changed database context to 'mdb'.
1> SELECT name, collation_name FROM sys.databases WHERE name = 'mdb'
2> GO
name    collation_name
------- ----------------------------------------------------------------------------------------------------------------
mdb     Latin1_General_CI_AI

(1 rows affected)
1> SELECT last_name FROM ca_contact WHERE contact_uuid = 0x31BE7DEA327AF1439045420F87E036B2
2> GO
last_name
----------------------------------------------------------------------------------------------------
?IRA

(1 rows affected)
1> SELECT last_name FROM ca_contact WHERE last_name = 'ȚÎRA'
2> GO
last_name
----------------------------------------------------------------------------------------------------

(0 rows affected)
1> SELECT last_name FROM ca_contact WHERE last_name = 'TIRA'
2> GO
last_name
----------------------------------------------------------------------------------------------------

(0 rows affected)
1> SELECT last_name FROM ca_contact WHERE contact_uuid = 0x31BE7DEA327AF1439045420F87E036B2 AND last_name LIKE '%RA'
2> GO
last_name
----------------------------------------------------------------------------------------------------
?IRA

(1 rows affected)
1> SELECT last_name FROM ca_contact WHERE contact_uuid = 0x31BE7DEA327AF1439045420F87E036B2 AND last_name LIKE '__RA'
2> GO
last_name
----------------------------------------------------------------------------------------------------

(0 rows affected)
1> SELECT last_name FROM ca_contact WHERE contact_uuid = 0x31BE7DEA327AF1439045420F87E036B2 AND last_name LIKE '%IRA'
2> GO
last_name
----------------------------------------------------------------------------------------------------
?IRA

(1 rows affected)
1> SELECT last_name FROM ca_contact WHERE contact_uuid = 0x31BE7DEA327AF1439045420F87E036B2 AND last_name LIKE '_IRA'
2> GO
last_name
----------------------------------------------------------------------------------------------------

(0 rows affected)

?在sqlcmd输出中只是我的控制台,SQL Management Studio输出的字符很好,因此我不必担心。

我认为我已经排除了I-circumflex的问题,并且正如您所看到的,我无法使单个字符通配符打到T逗号,也不能以文字形式或依靠口音不敏感。我无法触摸排序规则,因为使用此数据的应用程序需要上面显示的排序规则。

T逗号是我发现唯一无法使用的T逗号,变音符号,法语名称的重音,甚至C-cedillas都很好。有什么方法可以使搜索打到T逗号吗?这给我们的服务台人员带来了问题,因为他们无法通过常规搜索找到用户,我想知道是否只需要对数据进行精简并将所有非ASCII字符替换为ASCII即可正常工作。真可惜,因为我们最终开始使用非模糊数据,并且很高兴看到我提到的“常用”口音没有问题。

1 个答案:

答案 0 :(得分:0)

这仅仅是由于您处理Unicode文字字符串'ȚÎRA'的方式。

考虑以下代码:

CREATE TABLE #tmp (last_name NVARCHAR(20))
INSERT INTO #tmp VALUES (N'ȚÎRA')
SELECT * FROM #tmp WHERE last_name = 'ȚÎRA'
DROP TABLE #tmp

这不会输出任何结果。

但是,如果您为N'ȚÎRA'看到了一个拱门:

CREATE TABLE #tmp (last_name NVARCHAR(20))
INSERT INTO #tmp VALUES (N'ȚÎRA')
SELECT * FROM #tmp WHERE last_name = N'ȚÎRA'
DROP TABLE #tmp

您得到了结果。 N使其成为Unicode字符串文字。