0

我需要将编码为 latin-1 的数据插入 SQLite 数据库。(这是一个外部要求;更改数据库或编码不是一种选择。)根据SQLite 文档,这应该是可能的:

SQLite 并不特别关注它接收的文本,并且非常乐意处理未规范化甚至格式正确的 UTF-8 或 UTF-16 的文本字符串。因此,想要存储 IS08859 数据的程序员可以使用 UTF-8 接口来实现。

我可以很容易地对文本进行编码:

Charset charset = Charset.forName("ISO-8859-1");
byte[]  data    = mystring.getBytes(charset);

但我看不到如何插入它,因为 Statement.executeUpdate 需要一个字符串,而不是一个字节数组。

4

2 回答 2

1

虽然您可以假装您的 ISO8859-1 字符串是 UTF-8 字符串,但最好将它们存储为 blob。SQLite 将在需要时自动在 blob 和字符串之间进行转换(无论如何内部实现都是相同的),并且大多数内部函数在 blob 而不是字符串上执行时,将使用字节索引,这正是您想要的。

Blob 使用参数处理:

PreparedStatement ps = conn.prepareStatement(
    "INSERT INTO MyTable(Name) VALUES(?)");
ps.setBytes(1, data);
ps.execute();
于 2013-10-01T15:00:23.033 回答
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);
于 2013-10-01T15:05:59.077 回答