sql-server - 如何在 Microsoft SQL 查询的参数化 XQuery 表达式中使用 unicode 字符
问题描述
我在 SQL 中有一个将 Unicode 字符作为输入的 XPath 表达式。我需要参数化查询以防止 SQL 注入。
传递 Unicode 字符时,它们将作为?
实际字符出现。因此,当将字符串作为参数传递给查询时,查询不会返回任何结果。实际字符串是“abcồn dnưf hiứj”,它是来自表单的用户输入,但当作为参数传递给查询时,Unicode 字符将替换?
为如下所示。
declare @name NVARCHAR(100)=?;
SELECT
*
FROM
dbo.EMPLOYEE_DETAILS
WHERE
EMPLOYEE_DETAILS.EMP_XML.value('(/map/name)[1]', 'nvarchar(max)') like @name
当查询在 JPA 中打印时,参数打印如下。
[params=(String) %abc?n de?f hi?j%]
添加更多细节。
使用的服务器是 WebSphere Application Server 8.5,而 JPA Provider 是 Apache OpenJPA。
在 servlet 中打印 form 参数时,它无法识别 unicode 字符(abcễn 像 abc?n 一样打印)。上面的 nativeQuery 没有返回任何结果,因为数据库中没有像 abc?n 这样的字符串。因此,我将以下条目添加到 web.xml,并将以下属性添加到 Websphere Application Server。
自定义属性:
client.encoding.override = UTF-8 file.encoding = UTF-8
Web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
添加此条目后,当我打印字符串时,它们使用 UTF-8 编码打印,例如 abcồ dnÆ°f hiứj (正确为 UTF-8 格式),但查询仍然没有返回任何结果。
当我使用 PreparedStatement 尝试相同的事情时,我得到了结果。我只有在使用 nativeQuery 时才会遇到这个问题,但我只能使用 jpa。我怀疑我的 jpa 提供程序不支持 unicode 字符。
有人可以帮忙吗?是否有任何属性要添加到我的数据源以支持 UTF-8 字符?
解决方案
推荐阅读
- jaxb - 使用 Java 10 时忽略 Jaxb 包信息
- ios - SKView 集成到 UIViewController 中,UITextFields 滞后
- python - Python - 打印地图对象问题
- angular - Angular 6 - 在测试中触发反应形式控制值的变化
- android - 没有 AppCompatActivity 的 Fragments 中的工具栏
- python - 使用 Anaconda 从 Github 下载 Python 库
- python - 使用 Python,如何从 Google 搜索中抓取链接的描述性文本?
- c++ - 虚幻引擎 C++ 中的 TArray 浮动错误
- python - 为集成终端设置环境变量
- java - 当扫描仪位于输入的最后时如何使循环停止