问题是有关亚美尼亚。我使用的sql服务器2005年,排序规则 SQL_Latin1_General_CP1_CI_AS、数据主要是在亚美尼亚和我们不能使用unicode。

我测试了ms sql2008年与一个窗户排序规则对亚美尼亚语言(Cyrillic_General_100_),我发现这里,( http://msdn.microsoft.com/en-us/library/ms188046.aspx ),但它并没有帮助。

我有一个功能,也就订单的六角的价值观和一个低功能,这需要每个char在每一串并将其转换为这是较低的形式,但这是不可接受的解决方案,它的作品真的很缓慢,呼吁,职能上的每个列的一个巨大的表。

是否有任何解决这个问题不使用unicode,而不是工作与十六值手动?

更新:

在左侧的混合情况的话,按正确的顺序,并与较低的情况表示在右侧。希望这将有所帮助。谢谢你。字写在unicode。

  1. ԱբԳդԵզ -> աբգդեզ

  2. ԱգԳսԴԼ -> ագգսդլ

  3. ԲաԴֆդԴ -> բադֆդդ

  4. ԳԳԼասա -> գգլասա

  5. ԴմմլօՏ -> դմմլօտ

  6. ԵլԲնՆն -> ելբննն

  7. ԶՎլուտ -> զվլուտ

  8. էԹփձջՐ -> էթփձջր

  9. ԸխԾդսՂ -> ըխծդսղ

  10. ԹԶէըԿր -> թզէըկր

有帮助吗?

解决方案

一个解决办法是创建一个计算列于每一个文本列的值转换成亚美尼亚的排序规则并将其设置到较低的情况下,像这样:

Alter Table TableName
    Add TextValueArmenian As ( LOWER(TextColumn COLLATE Latin1_General_CI_AS) ) PERSISTED

一旦你这么做,你可以把索引这些列和查询他们。

如果这不是你的味道的茶,然后另一个解决方案将是一种索引图里创建一看 SCHEMABINDING 这一转换的各种列情况下和正确的排序规则,然后把索引这一观点。

编辑 我注意到你的例子,你使用一种情况不敏感,口音敏感的。也许是简单的解决方案给您订购的问题就是使用Latin1_General_CS_AS或Cyrillic_General_100_CS_AS如果有的话。

编辑

噢.之后,相当多的研究,我想我有答案不幸的是,可能不是,你会想要的。第一,是的,我可以复制文本提供进入代码或类似的东西的记事本++因为计算器是使用编码UTF-8和亚美尼亚将适UTF-8。第二,这暗示你想什么来实现:存储UTF-8SQL服务器。不幸的是,SQL服务器2008年(或任何先前版本)本身不支持UTF-8。为了将数据存储在UTF-8,你有极少数的选择:

  1. 存在的二进制转换到UTF-8在客户(这几乎消除了任何排序在服务器)
  2. 它存储在Unicode并将其转换为UTF-8。应当注意到SQL服务器驱动程序将已经转换大多数strings to Unicode和你的例会的工作现在Unicode。显而易见的缺点是,它吃了两次空间。
  3. 创建一个CLR用户定义的类型在SQL服务器储存UTF-8值。Microsoft提供了一个样品,附带SQL服务器就是这样做的。你可以下载的样本 从这里更.你还可以找到更多的信息,这样在这个的文章 丛书.缺点是,你必须有CLR启用在SQL服务器和我不确定它是如何以及执行。

现在,这就是说,我能得到你的样品的工作没有问题使用Unicode在SQL服务器。

If object_id('tempdb..#Test') Is Not Null
    Drop Table #Test
GO
Create Table #Test
(
    EntrySort int identity(1,1) not null
    , ProperSort int 
    , MixedCase nvarchar(50)
    , Lowercase nvarchar(50)
)
GO
Insert #Test(ProperSort, MixedCase, Lowercase)
Select 1, N'ԱբԳդԵզ',N'աբգդեզ'
Union All Select 6, N'ԵլԲնՆն',N'ելբննն'
Union All Select 2, N'ԱգԳսԴԼ',N'ագգսդլ'
Union All Select 3, N'ԲաԴֆդԴ',N'բադֆդդ'
Union All Select 4, N'ԳԳԼասա',N'գգլասա'
Union All Select 5, N'ԴմմլօՏ',N'դմմլօտ'
Union All Select 9, N'ԸխԾդսՂ',N'ըխծդսղ'
Union All Select 7, N'ԶՎլուտ',N'զվլուտ'
Union All Select 10, N'ԹԶէըԿր',N'թզէըկր'
Union All Select 8,N'էԹփձջՐ',N'էթփձջր'

Select * From #Test Order by ProperSort
Select * From #Test Order by Lowercase
Select * From #Test Order by Lower(MixedCase)

所有这三个查询的结果相同。

其他提示

你有没有得到这样的错误?

Msg 448, Level 16, State 1, Line 1
Invalid collation 'Cyrillic_General_100_'.

尝试:

ORDER BY Name COLLATE Cyrillic_General_100_CI_AS

或选择一个你更喜欢从这个名单:

select * from fn_helpcollations()
where name like 'Cyrillic_General_100_%'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top