Sql server 2008 r2 AnsiString被截断,有足够的空间

Sql server 2008 r2 AnsiString被截断,有足够的空间,sql-server-2008-r2,unicode-string,c++builder-6,Sql Server 2008 R2,Unicode String,C++builder 6,我正在插入一行,其中包含定义为varchar(50)的JOBCODE字段。当该字段的字符串大于20个字符时,我从SQL Server收到一个错误,警告该字符串将被截断 我怀疑这可能与Unicode宽字符有关,但我认为25个字符可以通过 以前有人见过这样的东西吗?我遗漏了什么?我想这是其他原因造成的 VARCHAR(50)应为50个字符,与编码无关 例如 CREATE TABLE AnsiString ( JobCode VARCHAR(20), -- ANSI with codepage

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

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


以前有人见过这样的东西吗?我遗漏了什么?

我想这是其他原因造成的

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

我认为这是其他原因造成的

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

事实上,插入相同字符串的是另一个varchar(20)列。感谢您的帮助和富有洞察力的评论。事实上,这是另一个插入相同字符串的varchar(20)列。感谢您的帮助和富有洞察力的评论。