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)列。感谢您的帮助和富有洞察力的评论。