1

我正在插入一个JOBCODE字段定义为的行varchar(50)。当该字段的字符串大于 20 个字符时,我从 SQL Server 收到一个错误,警告该字符串将被截断。

我怀疑这可能与 Unicode 宽字符有关,但我认为 25 个字符会通过。

有没有人见过这样的东西?我错过了什么?

4

1 回答 1

1

我认为这里还有其他问题。

VARCHAR(50)应为 50 个字符,与编码无关

举个例子

CREATE TABLE AnsiString
(
    JobCode VARCHAR(20), -- ANSI with codepage
    JobCodeUnicode NVARCHAR(20) -- Unicode
)

在两列中插入 20 个 unicode 字符

INSERT INTO AnsiString(JobCode, JobCodeUnicode) VALUES ('葉2葉4葉6葉8葉0葉2葉4葉6葉8叶0', 
                                                        N'葉2葉4葉6葉8葉0葉2葉4葉6葉8叶0')

select * from ansistring

退货

?2?4?6?8?0?2?4?6?8?0    葉2葉4葉6葉8葉0葉2葉4葉6葉8叶0

正如所料,? 为未映射到 ANSI 的字符插入,但无论哪种方式,我们仍然可以插入 20 个字符。

你可能有一个触发器在桌子上?它可能完全是另一列吗?您的数据访问层能否以某种方式将您的 unicode 字符串扩展为其他内容(例如 byte[])?

于 2012-08-08T14:23:34.193 回答