SQL Server Nvarchar and Java prepared statement

5

关于在 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,以便其中包含的任何字符串字面量都能被正确解释。 - Gord Thompson
4
你尝试过使用 sendStringParametersAsUnicode 方法吗?https://msdn.microsoft.com/zh-cn/library/ms378403.aspx - gofr1
谢谢提示。不过,我已经检查了我的源代码文件编码,它肯定是UTF-8。 - PastorPL
6
不需要使用N前缀。使用PreparedStatement.setNString()(而不是setString())应该可以正常工作。 - user330315
@a_horse_with_no_name 请将此作为答案发布,这样我就可以标记它了。顺便说一句:使用sendStringParametersAsUnicode的解决方案也有效。谢谢 :)。 - PastorPL
显示剩余2条评论
1个回答

7
根据@a_horse_with_no_name和@gofr1的评论,有两种解决方案:
  1. 更改sendStringParametersAsUnicode - 这会导致所有字符串被视为“N”字符串(这是全局更改)

  2. 使用PreparedStatement.setNString()代替setString() - 这是一种“本地”更改。

两者都能正常工作-选择适合您需求的方式即可 :)

1
Hibernate如何决定使用哪个方法:PreparedStatement.setNString()还是setString()? - Kulbhushan Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接