比较 SQL 服务器中的组合变音符和拉丁语扩展附加,C#

Compare Combining Diacritical Marks and Latin Extended Additional in SQL Server, C#

问题:下面两个相同的词不相等(在控制台中尝试 "PHƯỢNG" == "PHƯỢNG")

描述 :

第一个单词中的'Ợ'字符使用组合变音符号:U+01A0 + U+0323。这是来自数据库

数据

而第二个使用拉丁扩展附加:U+1EE2。这是通过越南语言环境键盘

输入的数据

这些话是越南语

Output : 虽然在 Unicode 块中有差异,但我想比较上面的两个词 在 Microsoft SQL Server[=51] 中相等=]

更多信息

SqlCommand : [Table] 整理 Vietnamese_CI_AI_KI_WI 像 N'%'+@Input+'%'

更多单词测试

单词:Ế [U+1EBE] 和 Ế [U+00CA , U+0301]

  • TIẾN
  • TIẾN

WORD : Ờ [U+1EDC] 和 Ờ [U+01A0, U+0300]

  • TRƯỜNG
  • TRƯỜNG

无法在 SQL 中进行比较,因为 SQL 不支持规范化 unicode 字符。 比较具有不同 unicode 编码的 unicode 字段的唯一方法(一种使用组合变音标记 Picture 1 一种使用拉丁扩展额外的块 Picture 2 将它们 标准化为 一个分解的 这是 Picture 1 完全合成它 就像 Picture 3.

这是概念:

  1. Select 您想要比较的所有字段数据并将它们存储到您想要的任何内容中(数组,列表 - select 通过 EF,数据表通过 sqlcommand)
  2. 然后通过循环和调用String.Normalize将它们全部归一化并调用String.Normalize取决于您的选择,您可以指定字符串归一化为完全复合(每个重音符是一个unicode字符)或分解它:只有一个字符代表 Ợ
  3. 终于可以正常过滤了

图片1


图片2


图3


参考: