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



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

让我们定义字符的唯一性。如果两个字符完全相同(如"a"one_answers"a"),则它们是相等的。像"A"one_answers"A"这样的字符是不相等的。如果两个字符串由相同顺序的相同字符组成,则它们是相等的,因此例如"foo"不等于"ofo"或"foo"。

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

问题--问题是如何做到这一点?我事先对这种语言一无所知,一个用户只能存储波兰语词汇中的单词,另一个用户可以同时存储几种语言中的单词(这是有效的)。

如果你认为这个问题微不足道,那你就错了。我已经发现SQL Server CE将双字符"s"视为单字符"ß",这是完全不可接受的。我发现了一些强制比较排序的变通方法,但我不能使用它们:

  • 他们假设SQL查询,这对我来说是行不通的,它会让我慢下来
  • 他们事先认为问题出在德语上,我不能这样认为

我在数据库中搜索,但我不使用排序,所以我不在乎用单词显示整个表是否在"中;正确的";命令与否。我所关心的是,当我在表中查找文本时,如果单词真的相等,而不是相似,我就会得到匹配。

变通办法

因为对于当前的项目,我需要";昨天";,我在数据库中保留了文本字符串字段,没有做任何更改,但在读取时,我会将它们从base64转换为utf8,在写入时则相反。对于空间来说,这有点过分了,但我可以接受它,而且对于区分大小写的ON,我完全独立于MS比较实现、排序规则等。每个Unicode字符都有不同的编码。

不过,我一直在寻找更优雅的解决方案(如果有的话)。

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

最新更新