如何在Microsoft SQL查询的参数化XQuery表达式中使用unicode字符

时间:2019-07-02 18:24:48

标签: sql-server jpa unicode

我在SQL中有一个XPath表达式,该表达式将Unicode字符作为输入。我需要参数化查询以防止SQL注入。

传递Unicode字符时,它们以?的形式出现,而不是实际的字符。因此,将字符串作为参数传递给查询时,查询不会返回任何结果。实际的字符串是“abcồndnưfhiứ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Æ°fhiứj(正确为UTF-8格式),但查询仍未返回任何结果。

当我使用PreparedStatement尝试相同的操作时,会得到结果。我仅在使用nativeQuery时才遇到此问题,但我只能使用jpa。我怀疑我的jpa提供程序不支持unicode字符。

有人可以帮忙吗?是否有任何属性可以添加到我的数据源中以支持UTF-8字符?

0 个答案:

没有答案