在SQL Server中比较组合变音标记和拉丁扩展附加,C#

时间:2018-03-07 03:21:43

标签: c# sql-server unicode sqlcommand

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

  • PHUONG
  • PHUONG

描述

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

第二个使用Latin Extended Additional:U + 1EE2。这是越南语区域键盘输入的数据

这些词在VietNamese

输出:虽然在Unicode块中存在差异,但我希望上面两个词比较在Microsoft SQL Server中等于

更多信息

SqlCommand:[表] COLLATE Vietnamese_CI_AI_KI_WI喜欢N'%'+ @输入+'%'

更多要测试的字

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

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

  • TRUONG
  • TRUONG

1 个答案:

答案 0 :(得分:0)

这不能在SQL中进行比较,因为SQL不支持规范化unicode字符。 将unicode字段与不同的unicode enconding进行比较的唯一方法(使用组合变音符号 Picture 1 的唯一方法,并使用拉丁语扩展附加块 { {1}} 将两者规范化为已分解的 Picture 2 完全合成,例如 Picture 1

这是概念:

  1. 选择要比较的所有字段数据并将其存储到您想要的任何内容中(数组,列表 - 通过EF选择,通过sqlcommand选择数据)
  2. 然后通过循环和调用String.Normalize规范化所有这些并输入取决于您的选择,您可以指定字符串规范化为完全复合(每个重音是一个unicode字符)或分解它:只有一个字符代表 Ø
  3. 最后你可以正常过滤它们
  4. enter image description here图片1

    enter image description here图片2

    enter image description here图3

    参考