如何以通用方式在SQL Server Compact Edition(CE)中存储唯一的多语言文本?

时间:2011-06-18 16:46:39

标签: sql-server unicode sql-server-ce multilingual

我在DirectTable模式下使用SQL Server CE 3.5。

让我们定义角色的唯一性。如果它们完全相同(如'a'和'a'),则两个字符相等。诸如'A'和'a'之类的字符不相等。如果两个字符串由相同顺序的相同字符组成,则它们是相等的,因此例如'foo'不等于'ofo'或'Foo'。

现在,请注意我不关心ISO委员会的说法,我需要非常精确的匹配。目的是在数据库中存储多语言文本(单词)。

问题 - 问题是如何做到的?我事先并不知道该语言,一个用户只能用波兰语词汇存储单词,另一个用户可以同时存储多种语言的单词(这是有效的)。

如果您认为这个问题很简单,那就错了。我已经发现SQL Server CE将double的's'视为与单个字符'ß'相同,这是完全不可接受的。我找到了一些解决方法,在比较时强制整理,但我不能使用它们:

  • 他们正在假设SQL查询,这对我来说是不行的,它会让我慢下来
  • 他们提前假设问题是德语,我不能假设这样的事情

我在数据库中搜索,但我不使用排序,所以我不在乎是否显示整个表格中的单词是否是“正确”顺序。我所关心的只是当我在表格中寻找文字时,如果单词真的相等而不相似,我会得到匹配。

解决方法

因为对于当前的项目我需要“昨天”的工作解决方案,我在数据库中保留了文本字符串字段而没有任何改变,但是在读取时我将它们从base64转换为utf8,反之亦然。对于空间来说有点过分,但是我可以忍受它,并且对于具有案例敏感性的重要事项,我完全独立于MS比较实现,排序等。每个单独的Unicode字符编码都不同。

尽管有更优雅的解决方案(如果存在的话),我都是耳朵。

1 个答案:

答案 0 :(得分:0)

对于初学者,您可以使数据库区分大小写,因此A<>一个。 SQL CE存储unicode,因此允许您存储所有必需的字符。你在.NET中进行比较还是使用索引?