【发布时间】: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