Re: MS SQL Server, JDBC, and Unicode?
Tom Anderson wrote:
Has anyone made SQL Server work with unicode in java?
I'm working on a system which wants to put unicode in a database. It
does this fine with Oracle, but we haven't been able to make it do so
when the database is SQL Server - and indeed the manufacturers of the
system list this as something that it won't do. Anything that isn't on
the current code page turns into a question mark.
Our columns are nvarchar, and sendStringParametersAsUnicode is true in
the JDBC URL. Is there more than this we need to do?
I've come across mention of a syntax which looks like N'this is a
unicode string' for writing unicode literals in SQL. Do i need to do
that? How do i do that if i'm using PreparedStatements?
We're using the MS driver. An alternative would be the open source jTDS
- any idea if that will fix the problem?
I can't get it not to work.
:-)
The following is tested with the MS driver (driver for 2000
against 2000, but I expect 2005 against 2005 to work identical):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Unicode {
public static void main(String[] args) throws Exception {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// SQLServer 2000
Connection con =
DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost;DatabaseName=Test",
"sa", "");
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE TABLE unifun (id INTEGER NOT NULL,
data NVARCHAR(50), PRIMARY KEY(id))");
stmt.executeUpdate("INSERT INTO unifun VALUES(1,N'?????? the
wrong way')");
PreparedStatement pstmt = con.prepareStatement("INSERT INTO
unifun VALUES(?,?)");
pstmt.setInt(1, 2);
pstmt.setString(2, "?????? the correct way");
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT id,data FROM unifun");
while(rs.next()) {
System.out.println(rs.getInt(1) + " : " + rs.getString(2));
}
rs.close();
stmt.executeUpdate("DROP TABLE unifun");
stmt.close();
con.close();
}
}
Arne