使用UTF-8编码导出HSQLDB数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用UTF-8编码导出HSQLDB数据库相关的知识,希望对你有一定的参考价值。

我正在尝试导出GeoTools HSQL 2数据库并将其加载回HSQL 1,以用于需要较旧数据库格式的遗留系统。表格包括度数符号等字符。然而,它作为转义序列u0080而不是编码字符出现。我需要修复它或让HSQL 1导入将转义后的字符转换回正确的编码。

EG

cp modules/plugin/epsg-hsql/src/main/resources/org/geotools/referencing/factory/epsg/EPSG.zip /tmp
cd /tmp
unzip EPSG.zip
java -jar hsqldb-2.4.1.jar 
# For the file, put jdbc:hsqldb:file:/tmp/EPSG
SELECT 'epsg-dump'

在结果中我看到像这样的u00b5

INSERT INTO EPSG_ALIAS VALUES(389,'epsg_unitofmeasure',9109,7302,'u00b5rad','')

查看hsqldb,我不知道如何控制正在写入的数据的编码,假设这是正确的位置:

https://github.com/ryenus/hsqldb/blob/master/src/org/hsqldb/scriptio/ScriptWriterText.java

答案

您可以使用以下过程:

  1. 在源数据库中,创建与原始表具有完全相同列的TEXT表。每张桌子都使用CREATE TEXT TABLE thecopyname (LIKE thesourcename)
  2. 对每个SET TABLE thecopyname SOURCE 'thecopyname.csv;encoding=UTF-8'表使用copy
  3. 使用thecopyname插入每个SELECT * FROM thesourcename表。
  4. 每个SET TABLE thecopyname SOURCE OFF使用thecopyname
  5. 现在,您将拥有几个带有UTF8编码的thecopyname.csv文件(每个文件都有自己的名称)。
  6. 在目标数据库上使用相反的过程。您需要显式创建TEXT表,然后使用qazxsw poi
另一答案

编码看起来像Unicode(一到四个十六进制数字)。在SET TABLE thecopyname SOURCE 'thecopyname.csv;encoding=UTF-8'中尝试这个(快速和脏):

bash

以上是关于使用UTF-8编码导出HSQLDB数据库的主要内容,如果未能解决你的问题,请参考以下文章

PHP 使用正确的编码导出excel中的UTF-8数据

如何在 HSQLDB 中使用多行 SELECT 语句导出数据?

使用 oracle sql developer 将 utf-8 数据导出到文本文件

php 多语言(UTF-8编码)导出ExcelCSV乱码解决办法之导出UTF-8编码的ExcelCSV

是否无法将数据库/目录导出到 HSQLDB 中的单个文件

在excel中以正确的编码导出UTF-8数据