Экспорт базы данных HSQLDB с кодировкой UTF-8 - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь экспортировать базу данных GeoTools HSQL 2 и загрузить ее обратно в HSQL 1 для устаревшей системы, которой требуется более старый формат базы данных. Таблицы включают символы, такие как символ степени. Тем не менее, это скорее escape-последовательность \u0080, а не закодированный символ. Мне нужно либо исправить это, либо заставить импорт HSQL 1 преобразовать экранированные символы обратно в правильную кодировку.

, например

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

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вы можете использовать следующую процедуру:

  1. В исходной базе данных создайте таблицы TEXT с точно такими же столбцами, что и у исходных таблиц.Используйте CREATE TEXT TABLE thecopyname (LIKE thesourcename) для каждой таблицы.
  2. Используйте SET TABLE thecopyname SOURCE 'thecopyname.csv;encoding=UTF-8' для каждой из copy таблиц.
  3. INSERT в каждую таблицу thecopyname с SELECT * FROM thesourcename.
  4. Используйте SET TABLE thecopyname SOURCE OFF для каждого thecopyname
  5. Теперь у вас будет несколько thecopyname.csv файлов (каждый со своим именем) с кодировкой UTF8.
  6. Используйте обратную процедуру в целевой базе данных,Вам нужно подробно создать таблицы TEXT, а затем использовать SET TABLE thecopyname SOURCE 'thecopyname.csv;encoding=UTF-8'
0 голосов
/ 18 января 2019

Кодировка выглядит как Юникод (от одной до четырех шестнадцатеричных цифр). Попробуйте это в bash (быстро и грязно):

echo -ne "$(< dump.sql)" > dump_utf8.sql

...