为什么破折号成为一个问题?或在SQL中编码数据的问题

一位客户与我联系,六个月前我曾与我联系,并从Excel将数据上传到该客户的产品列表“应用程序”。视频上的结果。
该文件是在中国形成的,该国未使用通常的西里尔字母。

装载了名称为“ ABM3C‐25‐D‐Y‐T»T”的项目。

下载后,我们得到“ ABM3C?25?D4Y?T”。在ProFiler之后,我捕获了写过程:

exec 3,“ ABM3C-25-D4Y-T”

也就是说,替换已在SQL本身上完成。该数据库是在Client Communicator平台上创建的。出于习惯,我检查了数据库本身的排序选项,一切都很好-Cyrillic_General_CI_AS,如在安装期间建议的那样。

与转换和转换一起玩-发出问题而不是破折号。我自己无法解决问题。。。我与Client Communicator平台开发人员技术支持服务联系以解决此问题。

首先,开发人员的反应非常令人惊讶:“您必须使用Nvarchar数据类型,并且可能使用Varchar。”在具有nvarchar数据类型的字段中执行记录(在配置程序中创建字段时默认设置)。

我证明最简单的脚本给了我所有相同的不幸问号。
选择'ABM3C-25 D D4Y-T',强制转换('ABM3C 25 25 D D4Y-T'作为nvarchar)我

得到建议-将N.放在第一个单引号之前,

选择N'ABM3C-25-D4Y-T'

给了我想要的结果。通过添加N,我们指出SQL,我们需要将此字符串作为Unicode中的值进行处理。

通过添加N来更正过程调用:

exec 3,N'ABM3C‐25‐D4Y‐T'

我一直都知道我必须将字母N放在引号之前,但是直到遇到这个问题之前,我对它没有任何特殊的意义。

All Articles