我有DB,其中一些名字是用立陶宛字母书写的,但当我尝试使用java时,它会忽略立陶宛字母
DbConnection();
zadanie=connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
sql="SELECT * FROM Clients;";
dane=zadanie.executeQuery(sql);
String kas="Imonė";
while(dane.next())
{
String var=dane.getString("Pavadinimas");
if (var!= null) {var =var.trim();}
String rus =dane.getString("Rusys");
System.out.println(kas+" "+rus);
}
void DbConnection() throws SQLException
{
String baza="jdbc:odbc:DatabaseDC";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(Exception e){System.out.println("Connection error");}
connect=DriverManager.getConnection(baza);
}
在DB类型的字段中是TEXT,大小为20,不要使用任何其他字母解码或类似的东西。
它给了我“ImonėImone”尽管在DB中写的是“Imonė”,它等于rus。
答案 0 :(得分:3)
现在已经从Java 8中删除了JDBC-ODBC Bridge,这个特定问题将越来越多地成为历史感兴趣的项目,但是为了记录:
对于代码点U + 00FF之上的Unicode字符,JDBC-ODBC Bridge从未正确使用Access ODBC驱动程序(“Jet”和“ACE”)。这是因为Access存储Unicode这样的字符,但不使用UTF-8编码。相反,它使用UTF-16LE的“压缩”变体,其中代码点U + 00FF及以下的字符存储为单个字节,而U + 00FF以上的字符存储为空字节,后跟UTF-16LE字节对(一个或多个)。
如果字符串'Imonė'存储在Access数据库中,以便它在Access本身中正确显示
然后将其存储为
I m o n ė
-- -- -- -- --------
49 6D 6F 6E 00 17 01
('''是U + 0117)。
JDBC-ODBC Bridge无法理解从最终字符的Access ODBC驱动程序接收到的内容,因此只返回
Imon?
另一方面,如果我们尝试使用UTF-8编码将字符串存储在Access数据库中,就像JDBC-ODBC Bridge尝试插入字符串本身一样
Statement s = con.createStatement();
s.executeUpdate("UPDATE vocabulary SET word='Imonė' WHERE ID=5");
该字符串将以UTF-8编码为
I m o n ė
-- -- -- -- -----
49 6D 6F 6E C4 97
然后Access ODBC驱动程序将它作为
存储在数据库中I m o n Ä —
-- -- -- -- -- ---------
49 6D 6F 6E C4 00 14 20
C4
00 14 20
现在JDBC-ODBC Bridge可以正常检索它(因为Access ODBC Driver“在出路时”将字符“反转”回C4 97
),但是如果我们在Access中打开数据库,我们会看到< / p>
ImonÄ—
JDBC-ODBC Bridge 从不,永远不会能够为Access数据库提供完全本机Unicode支持。将各种属性添加到JDBC连接将不会解决问题。
对于没有ODBC的Access数据库的完整Unicode字符支持,请考虑使用UCanAccess。 (更多细节见另一个问题here。)
答案 1 :(得分:0)
当您使用JDBC-ODBC桥时,you can specify a charset in the connection details。
试试这个:
Properties prop = new java.util.Properties();
prop.put("charSet", "UTF-8");
String baza="jdbc:odbc:DatabaseDC";
connect=DriverManager.getConnection(baza, prop);
答案 2 :(得分:0)
尝试使用此“Windows-1257”而不是UTF-8,这适用于波罗的海地区。
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "Windows-1257");