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