在我的程序中,我使用JTDS (http://jtds.sourceforge.net/)连接到Microsoft SQL数据库。我的数据库的编码是iso-8859-1。但是,要在Java中发送查询,我必须使用String(通常使用UTF编码)。是否可以使用不同于UTF的编码发送查询?
编辑:使用INSERT或UPDATE后,结果显示错误。如果我只从数据库中选择,则特殊字符会显示在右侧。
发布于 2014-07-31 00:02:48
java的一个突出的设计原则是文本、字符串始终是Unicode。通常,您甚至看不到它是Unicode格式的,因为只有在获取byte时,您(应该)才会指示应将字节转换为的编码。因此,理想情况下,您不需要做任何事情。
该错误可能源于:
javac的编码相同。这可以通过尝试\u00FC而不是ü__.来测试
尝试插入"\u00FC +ü“和SELECT进行字节比较。转储字节码。(以避免控制台问题。)
Arrays.toString(string.getBytes("ISO-8859-1"));Do 不尝试像new String(s.getBytes("ISO-8859-1"), "UTF-8")那样的修复--或者更多。
如果没有发现问题,则必须在其他地方寻找原因。
顺便说一下:最好使用Windows-1252 (Windows拉丁语-1)而不是ISO-8859 (拉丁语-1),因为它允许使用一些特殊字符,如逗号引号(范围为0x80 - 0xBF)。HTML也接受Windows-1252作为ISO-8859-1。
发布于 2014-07-30 23:36:24
JDBC驱动程序实际上在内部处理转换,如果您不是简单地通过连接字符串来创建插入:
(这很糟糕,千万不要这样做)
String aValue = "äöü";
String insert = "INSERT INTO table VALUES('" + aValue + "')";
Statement s = connection.createStatement();
s.executeUpdate(insert);使用预准备语句(这也可以避免SQL注入等安全漏洞):
String aValue = "äöü";
String insert = "INSERT INTO table VALUES(?)";
PreparedStatement s = connection.prepareStatement(insert);
s.setString(1, aValue);
s.executeUpdate();编辑:还要确保您尝试插入的内容确实是您想要插入的内容。对于德语元音,unicode中有多种可能的表示形式,例如,ö可以表示为"\u00F6",但它也可以(很少,取决于来源)使用组合变音符号表示(例如,"o\u0308“也类似于ö)。
发布于 2017-02-24 21:37:49
当我连接到使用ISO-8859-1编码的Access数据库(.mdb)时,我使用以下语法:
String dbPath = "fakeDBPath.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + dbPath + ";DriverID=22;READONLY=false}";
final Properties prop = new Properties();
prop.put("charSet", "ISO-8859-1");
Connection conn = DriverManager.getConnection( database, prop );在获得连接之后,我就可以使用Java字符串了,而无需指定任何额外的编码。也许JTDS支持特定的属性来设置编码。
例如,要在数据库中插入数据:
String cmd = "INSERT INTO Table (Col1,Col2,Col3,Col4) VALUES (1000,'àèìòù','é®þü','fake data');";
Statement s = DBTable_1.getStatement();
try
{
int r = s.executeUpdate(cmd);
} catch ( SQLException ex )
{
Logger.getLogger( Main.class.getName() ).log( Level.SEVERE, null, ex );
}并从数据库中读取:
String cmd = "SELECT * FROM Table WHERE Col2='àèìòù';";
Statement s = DBTable_1.getStatement();
try
{
ResultSet r = s.executeQuery(cmd);
while(r.next())
{
System.out.println("Col2: " + r.getString(2) + " Col3:" + r.getString(3));
}
} catch ( SQLException ex )
{
Logger.getLogger( Main.class.getName() ).log( Level.SEVERE, null, ex );
} https://stackoverflow.com/questions/25037522
复制相似问题