我在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即可正常工作。真可惜,因为我们最终开始使用非模糊数据,并且很高兴看到我提到的“常用”口音没有问题。
答案 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字符串文字。