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[] など) に拡張している可能性はありますか?