AnsiString被截断,空间充足

时间:2012-08-08 14:11:41

标签: sql-server-2008-r2 unicode-string c++builder-6

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

我怀疑这可能与Unicode宽字符有关,但我想当时会传递25个字符。

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

1 个答案:

答案 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 [])吗?