SQL Server Nvarchar和Java预准备语句

Pas*_*rPL 4 java sql sql-server jdbc sql-server-2008

我对向SQL Server 2008 R2插入字符串有疑问。当我尝试插入带有一些国家字母的字符串时,会收到“?” 代替。

我知道N在字符串文字的开头添加将解决此问题,但是我正在使用JDBC准备的语句,如下所示:

INSERT INTO MyTable(col1, col2) VALUES (?,?);
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO MyTable(col1, col2) VALUES (N?,N?);
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*rPL 5

根据@a_horse_with_no_name和@ gofr1编写的注释,有两种解决方案:

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

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

两者都有效-使用更适合您的需求的方法:)