質問

I'm inserting a row with a JOBCODE field defined as varchar(50). When the string for that field is greater than 20 characters I get an error from SQL Server warning that the string would be truncated.

I suspect this may have to do with Unicode wide characters, but I thought then 25 characters would pass.

Has anyone seen something like this before? What am I missing?

役に立ちましたか?

解決

I think there is something else at fault here.

VARCHAR(50) should be 50 characters, irrespective of the encoding

as an example

CREATE TABLE AnsiString
(
    JobCode VARCHAR(20), -- ANSI with codepage
    JobCodeUnicode NVARCHAR(20) -- Unicode
)

Inserting 20 unicode characters into both columns

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

Returns

?2?4?6?8?0?2?4?6?8?0    葉2葉4葉6葉8葉0葉2葉4葉6葉8叶0

As expected, ? is inserted for characters which weren't mapped into ANSI, but either way, we can still insert 20 characters.

Do you possibly have a trigger on the table? Could it be another column entirely? Could your data access layer somehow be expanding your unicode string to something else (e.g. byte[])?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top