首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValidateRequest故障还是Server故障?

ValidateRequest故障还是Server故障?
EN

Stack Overflow用户
提问于 2012-04-04 10:18:54
回答 2查看 419关注 0票数 3

我在看这个文章。上面写着:

该字符以值%uff1c表示。如果将此值传递给SQL数据库中的varchar字段,它将被转换为真正的<字符。我还没有在nvarchar域上看到这一工作。

好吧,我认为这是Server的错误,而不是ValidateRequest黑客!如果编写%uff1c,Server必须将其保存为%uff1c。或者,至少,它应该按照管理员选择的字符集编码“再次”%uff1c

我说错了吗?

EN

回答 2

Stack Overflow用户

发布于 2012-04-04 15:51:45

这不是一个bug,而是一个特性(但您不能使用它)。

本文的要点是:如果要发布包含“<”的字符串,请将每个<转换为< (Unicode代码点FF1C),以避免验证错误。

Server接收包含<的Unicode字符串并尝试对其进行处理。如果表列或过程参数的数据类型启用Unicode (NCHAR、NVARCHAR,每个字符2个字节),则不进行转换,Server存储原始值。

但是,如果将该值传递给VARCHAR (每个字符1字节)列或变量,则字符< (2字节代码点)将转换为<。扩展AakashM的代码以说明:

代码语言:javascript
复制
DECLARE @nv nvarchar, @v varchar
SET @nv = N'<'
SET @v = '<'
SELECT @nv, @v, CONVERT(varchar, @nv)

<   <   <

但是,由于这是21世纪,而且数据库应该能够支持每一种标准化的语言、符号和字符,很少有场景可以证明使用VARCHAR数据是合理的。

票数 2
EN

Stack Overflow用户

发布于 2012-04-04 15:22:34

Server不能将<存储在varchar字段中。在这种情况下,你希望发生什么:

代码语言:javascript
复制
DECLARE @v varchar(1)

SET @v = '<'

SELECT @v

(请注意,该<不是通常的左角括号字符,而是带有代码点FF1C的Unicode字符)。

以上结果将是< (通常的左角括号字符)。如果你想说这是一个错误,你应该说你期望的结果是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10009177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档