【问题标题】:SQL Server Nvarchar and Java prepared statementSQL Server Nvarchar 和 Java 准备好的语句
【发布时间】:2016-07-29 08:59:53
【问题描述】:

我有一个关于向 SQL Server 2008 R2 插入字符串的问题。当我尝试插入带有一些国家字母的字符串时,我收到“?”反而。

我知道在字符串文字的开头添加 N 可以解决这个问题,但我使用的是 JDBC 预处理语句,如下所示:

INSERT INTO MyTable(col1, col2) VALUES (?,?);

我的问题是:如何添加这个“N”字母?我应该这样做吗?

INSERT INTO MyTable(col1, col2) VALUES (N?,N?);

说实话,我不相信,因为这根本行不通。

【问题讨论】:

  • N 前缀应该不是必需的。检查 Java 源文件的编码,确保它保存为 UTF-8,以便正确解释它包含的任何字符串文字。
  • 你试过sendStringParametersAsUnicode方法吗? msdn.microsoft.com/en-us/library/ms378403(v=sql.110).aspx
  • 感谢提示。但是,我检查了我的源代码文件编码,它肯定是 UTF-8。
  • 您不需要N 前缀。使用PreparedStatement.setNString()(而不是setString())应该可以正常工作
  • 按照@a_horse_with_no_name 的建议尝试setNString。我刚刚使用 Microsoft 的 JDBC 驱动程序测试了一个将希腊字符插入 SQL Server 2008R2 的 PreparedStatement,setString 对我来说效果很好,但也许你的设置有点不同。

标签: java sql sql-server sql-server-2008 jdbc


【解决方案1】:

基于@a_horse_with_no_name 和@gofr1 编写的cmets,有两种解决方案:

  1. 更改sendStringParametersAsUnicode - 这导致所有字符串都将被视为“N”个字符串(这是全局更改)

  2. 使用PreparedStatement.setNString() 而不是setString() - 这是“本地”更改。

两者都在工作 - 使用更适合您的需求:)

【讨论】:

  • HIbernate 如何决定使用哪一个#PreparedStatement.setNString() 或 setString() ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多