【问题标题】:Convert nvarchar to varchar in c# to mirror SQL's functionality在c#中将nvarchar转换为varchar以镜像SQL的功能
【发布时间】:2014-08-05 08:28:12
【问题描述】:

我正在维护一个旧数据库,其中一个表的主键跨三列。其中两列是 varchar(100)

有时系统会尝试从我们的数据源插入数据,例如F1501 和Φ1501(这是正确的)。但是,SQL 似乎不支持主键的这些值,因此它将Φ 静默转换为F,这会产生主键冲突。

在我的 c# 应用程序中,我想检查重复项,因此我需要一种方法来比较 Φ1501 和 F1501 以生成匹配项,以便我可以跳过插入它。

有什么想法吗?

【问题讨论】:

  • 把code中的字符串转成ASCII怎么样?到字节:byte[] unicode = Encoding.Unicode.GetBytes("stuff"); 然后string ascii = Encoding.ASCII.GetString(unicode);?
  • 这给了我?♥1 5 0 1hmm
  • 不确定除了将旧数据库转换为使用 NVARCHAR 而不是 VARCHAR 之外,您还能做些什么。将 unicode 数据填充到非 unicode 列中并不是一个好主意。
  • 这是我的第一个想法,但是即使列是 nvarchar,因为该列是主键,所以键仍然存储为纯 ascii(从我的测试看来)
  • 理想情况下,您的主键不应是任何类型的 VARCHAR/NVARCHAR,最好用作 UNIQUE 约束。但是,我的猜测是您的测试中有些地方不对劲。

标签: c# sql-server-2012


【解决方案1】:

想通了:String.Normalize

Console.WriteLine("Φ1501".Normalize());

输出:

F1501

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2014-05-07
    • 2013-04-07
    • 2011-12-11
    • 2016-03-18
    • 2010-11-16
    • 2021-08-31
    • 2020-03-10
    • 2014-11-28
    相关资源
    最近更新 更多