3

I was reading this article. It says :

That character is represented at the value %uff1c. If this value is passed to a varchar field in a SQL database, it will get converted to the real < character. I have not seen this work on a nvarchar field

Well, I think this is a SQL Server bug, not a ValidateRequest hack! If I write %uff1c, SQL Server must save it as %uff1c. Or, at least, it should encode "again" %uff1c by the charset choosed by admin.

Am I wrong?

4

2 に答える 2

2

これはバグではなく機能です (ただし、使用することはできません)。

この記事の要点は、「<」を含む文字列を投稿する場合は、各 < を < (Unicode コードポイント FF1C) に変換して、検証エラーを回避することです。

SQL Server は、< を含む Unicode 文字列を受け取り、それを処理しようとします。テーブル列またはプロシージャ パラメーターのデータ型が Unicode 対応 (NCHAR、NVARCHAR、1 文字あたり 2 バイト) の場合、変換は行われず、SQL Server は元の値を格納します。

ただし、値が VARCHAR (1 文字あたり 1 バイト) 列または変数に渡される場合、文字 < (2 バイトのコードポイント) は < に変換されます。AakashM のコードを拡張して説明します。

DECLARE @nv nvarchar, @v varchar
SET @nv = N'<'
SET @v = '<'
SELECT @nv, @v, CONVERT(varchar, @nv)

<   <   <

しかし、これは 21 世紀であり、データベースはすべての標準化された言語、記号、および文字をサポートできる必要があるため、VARCHAR データの使用を正当化するシナリオはほとんど残っていません。

于 2012-04-04T15:51:45.910 に答える
1

varcharSQL Server は < をフィールドに格納できません。この状況で何が起こりたいですか:

DECLARE @v varchar(1)

SET @v = '<'

SELECT @v

( < は通常の左山括弧文字ではなく、 codepoint を持つ Unicode 文字であることに注意してくださいFF1C)。

上記の結果は<(通常の左山括弧文字) になります。これがバグであると言いたい場合は、予想される結果を説明する必要があります。

于 2012-04-04T15:22:34.363 に答える