我正在插入一行,JOBCODE
字段定义为varchar(50)
。当该字段的字符串大于20个字符时,我从SQL Server收到错误警告该字符串将被截断。
我怀疑这可能与Unicode宽字符有关,但我想当时会传递25个字符。
有没有人见过这样的东西?我错过了什么?
答案 0 :(得分: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 [])吗?