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

Sql server 如何在SQL Server Compact Edition(CE)中以通用方式存储唯一的多语言文本?,sql-server,unicode,sql-server-ce,multilingual,Sql Server,Unicode,Sql Server Ce,Multilingual,我在DirectTable模式下使用SQL Server CE 3.5 让我们定义字符的唯一性。如果两个字符完全相同(如“a”和“a”),则两个字符相等。“A”和“A”等字符不相等。如果两个字符串由相同顺序的相同字符组成,则它们是相等的,因此例如'foo'不等于'ofo'或'foo' 现在,请注意,我不在乎ISO委员会怎么说,我需要如此精确的匹配。目的是在数据库中存储多语言文本(单词) 问题——问题是如何做?我事先对该语言一无所知,一个用户只能存储来自波兰语词汇的单词,另一个用户可以同时存储来自

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

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

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

问题——问题是如何做?我事先对该语言一无所知,一个用户只能存储来自波兰语词汇的单词,另一个用户可以同时存储来自多种语言的单词(这是有效的)

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

  • 他们假设SQL查询,这对我来说是行不通的,它会让我慢下来
  • 他们事先假设问题出在德语上,我不能假设这样的事情
我在数据库中搜索,但我不使用排序,所以我不关心用单词显示整个表的顺序是否“正确”。我所关心的是,当我在表格中查找文本时,如果单词真的相等,而不是相似,我就会得到匹配

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


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

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

unicode规范化如何,例如Angrstoem字符,它有三种不同但等效的表示形式(“U+C5”[拉丁语-1补充],“U+212B”[类似字母的符号],“U+41 U+30A”[“a”加上变音符号])。你想如何处理这个问题?@Kerrek SB,你已经回答了自己,因为你(人类)可以分辨出不同,它们是不同的。好吧,Unicode实际上要求所有这些比较相等,而事实上,作为人类,我无法从视觉上区分它们(仅通过检查二进制表示)。此外,您的输入设备不需要生成任何特定版本,因此如何输入角色并可靠地匹配它?@Kerrek SB,这里重要的不是可玩性,而是可靠性。当我将字节0x16放入数据库时,我希望得到字节0x16作为返回,而不是0x98,即使它们在视觉上是相同的。我需要精确的狙击手。IOW:考虑文本的位,而不是屏幕上的外观。在这种情况下,也许你应该将每个字符存储为二进制值?区分大小写当然很简单,我已经设置好了。查找(比较)由SQLCE引擎完成。那么剩下的问题是什么?你能给出一个展示问题的最小且独立的例子吗?