#linux #sqlite #ms-access #encoding #codepages
#linux #sqlite #ms-access #кодирование #кодовые страницы
Вопрос:
Приветствую, я представлю свой случай:
- Я нахожусь в linux UBUNTU
- у меня есть несколько Jet3 .MDB (база данных MS Acess) размером около 500 МБ каждая, в которых данные закодированы в cp1256 / WINDOWS-1256
- я создал базы данных sqlite, следуя этой статье, чтобы выполнить преобразованиеhttp://cltb.ojuba.org/en/articles/mdb2sqlite .
Вот скрипт bash, который я создал для преобразования базы данных. Предполагая, что у меня есть MS Access x.MDB
mdb-schema "x.mdb" | perl -wpe 's%^DROP TABLE %DROP TABLE IF EXISTS %i;
s%(Memo/Hyperlink|DateTime( (Short))?)%TEXT%i;
s%(Boolean|Byte|Byte|Numeric|Replication ID|(w )?Integer)%INTEGER%i;
s%(BINARY|OLE|Unknown ([0-9a-fx] )?)%BLOB%i;
s%s*(d )s*(,?[ t]*)$%${1}%;' | sqlite3 > x.db
for i in $(mdb-tables "x.mdb"); do echo $i; (
echo "BEGIN TRANSACTION;";
MDB_JET3_CHARSET="WINDOWS-1256" mdb-export -R ";n" -I "x.mdb" $i;
echo "END TRANSACTION;" ) | sqlite3 "x.db"; done
Я попытался изменить MDB_JET3_CHARSET на WINDOWS-1256, cp1256, WINDOWS-1251, cp1251, UTF-8. некоторые из них выдают разные результаты в данных, когда я просматриваю их, но по-прежнему не имеют никакого смысла вообще.
спасибо ранее и извините за мой плохой английский
Комментарии:
1. привет! попробуйте добавить Charset = cp1251 в строку подключения
2. привет @evgeniy. labunskiy спасибо за комментарий, я попытался изменить mdb_jet3_charset на несколько форматов, чтобы noavail. я отредактировал свой вопрос, чтобы включить созданный мной скрипт.
Ответ №1:
Хорошо, тогда, поиграв на многих сайтах, я наткнулся на это http://git.ojuba.org/cgit/thawab/tree и нашел скрипт, который дает мне идею (это bok2ki.py , если кому-то интересно), я ЛЮБЛЮ OPEN SOURCE !! 🙂
Я добавляю параметр MDB_ICONV с «UTF-8» в качестве его значения и изменяю значение параметра MDB_JET3_CHARSET на «cp1256»
на самом деле я действительно не знаю, что это за параметр на самом деле, но я предполагаю, что кодировка MDB_JET3 предназначена для определения кодировки / encoding / codepages (я действительно не знаю разницы, я должен исследовать больше), а MDB_ICONV — для определения кодировки целевой базы данных. в любом случае, это всего лишь мое предположение.
тогда вот мой новый скрипт:
mdb-schema "x.mdb" | perl -wpe 's%^DROP TABLE %DROP TABLE IF EXISTS %i;
s%(Memo/Hyperlink|DateTime( (Short))?)%TEXT%i;
s%(Boolean|Byte|Byte|Numeric|Replication ID|(w )?Integer)%INTEGER%i;
s%(BINARY|OLE|Unknown ([0-9a-fx] )?)%BLOB%i;
s%s*(d )s*(,?[ t]*)$%${1}%;' | sqlite3 x.db
for i in $(mdb-tables "x.mdb"); do echo $i; (
echo "BEGIN TRANSACTION;";
MDB_JET3_CHARSET="cp1256" MDB_ICONV="UTF-8" mdb-export -R ";n" -I "x.mdb" $i;
echo "END TRANSACTION;" ) | sqlite3 "x.db"; done
Комментарии:
1. хм, я пытался установить этот ответ в качестве принятого ответа, но мне приходится ждать 15 часов, потому что это мой собственный ответ. это своего рода отстой.
2. Я думаю, что это
MDBICONV
неMDB_ICONV
.