我需要将编码为latin-1的数据插入到SQLite数据库中。 (这是一个外部要求;更改数据库或编码不是一种选择。)根据SQLite documentation,这应该是可能的:
SQLite并不特别关注它收到的文本,并且非常乐意处理 未标准化的文本字符串,甚至是格式良好的UTF-8或UTF-16。从而, 想要存储IS08859数据的程序员可以使用UTF-8接口来实现。
我可以轻松编码文本:
Charset charset = Charset.forName("ISO-8859-1");
byte[] data = mystring.getBytes(charset);
但我无法看到如何插入它,因为Statement.executeUpdate需要一个String,而不是一个字节数组。
答案 0 :(得分:1)
虽然您可以假装您的ISO8859-1字符串是UTF-8字符串,但最好将它们存储为blob。 SQLite将在需要时自动在blob和字符串之间进行转换(内部实现完全相同),并且大多数internal functions在blob而不是字符串上执行时将使用字节索引,这正是您想要的。 / p>
使用参数处理Blob:
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO MyTable(Name) VALUES(?)");
ps.setBytes(1, data);
ps.execute();
答案 1 :(得分:0)
将字符串编码为具有所需编码的字节数组,并在运行查询之前将其作为(格式错误的)UTF-8读回。
String query = "INSERT INTO ...";
// Ugly trickery to insert data encoded as latin-1
query = new String(query.getBytes("ISO-8859-1"), "UTF-8");
statement.executeUpdate(query);