1

JOBCODEとして定義されたフィールドを持つ行を挿入していvarchar(50)ます。そのフィールドの文字列が 20 文字を超えると、文字列が切り捨てられるという SQL Server の警告からエラーが発生します。

これは Unicode ワイド文字に関係しているのではないかと思いますが、25 文字はパスすると思いました。

誰かが前にこのようなものを見たことがありますか? 私は何が欠けていますか?

4

1 に答える 1

1

ここには他に何か問題があると思います。

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

于 2012-08-08T14:23:34.193 に答える