Привет всем.
Есть база mdb(M$ Access). Есть простенький интерфейс к ней(формы, отчеты), написанный ср-вами самого Access'а. Было принято решение уйти с Access'а на PostgreSQL(дабы отвязаться от пакета M$ Office). Хочется сделать такой переход плавным. Т.е. юзеры будут продолжать работать через интерфейс Аксеса, а я тем временем буду писать веб-интерфейс на Perl + DBI.
Подключаюсь к базе средствами DBI + ODBC.В общем-то работает.. кроме русского. кодировка CP1251 есесно.
Имею:
# more /etc/unixODBC/odbc.ini
[mdb_test_01]
Description = Microsoft Access Database
Driver = MDBToolsODBC
Database = /home/lss/mdb/mdb_test_01.mdb
Servername = localhost
UserName =
Password =
port = 5432
Servercharset = CP1251 # скопипастил откуда-то из гугла. не влияет на работу.
Charset = CP1251 ## more /etc/unixODBC/odbcinst.ini
[MDBToolsODBC]
Description = MDB Tools ODBC drivers
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =
Servercharset = CP1251 # сюда тоже добавил. тоже без результата.
Charset = CP1251
UsageCount = 4$ more test_query_ODBC.pl
#!/usr/bin/perluse strict;
use DBI;
my $DSN = 'mdb_test_01';
my $dbh = DBI->connect("dbi:ODBC:$DSN", '','') or die "$DBI::errstr\n";my $sql = qq{ SELECT gen,mname FROM contacts };
my $sth = $dbh->prepare( $sql );
$sth->execute();my( $gen, $mname);
$sth->bind_columns( undef, \$gen, \$mname );while( $sth->fetch() ) {
print "$mname\n";
}$sth->finish();
$dbh->disconnect();Пробуем запустить:
$perl test_query_ODBC.pl|head???????
????
????????
????????
?????
?????????
???????
???????
?????????Скрипт запускался под линукс. настройка локали(и терминала) UTF-8. пробовал менять на CP-1251. Нет эффекта.
При любом раскладе вместо русских символов - вопросики.
Я так понимаю, проблема с настройкой самого unixODBC. Может кто подскажет как быть. Весь гугл облазил, не пойму, такое ощущение, что Аксесовские базы и альтернативные кодировки - вещи несовместимая..
Заранее спасибо! )
>[оверквотинг удален]
>???????
>?????????
>
>Скрипт запускался под линукс. настройка локали(и терминала) UTF-8. пробовал менять на CP-1251.
>Нет эффекта.
>При любом раскладе вместо русских символов - вопросики.
>Я так понимаю, проблема с настройкой самого unixODBC. Может кто подскажет как
>быть. Весь гугл облазил, не пойму, такое ощущение, что Аксесовские базы
>и альтернативные кодировки - вещи несовместимая..
>Заранее спасибо! )$perl test_query_ODBC.pl|head | iconv -t utf-8
так нормально отображает?
>[оверквотинг удален]
>>Скрипт запускался под линукс. настройка локали(и терминала) UTF-8. пробовал менять на CP-1251.
>>Нет эффекта.
>>При любом раскладе вместо русских символов - вопросики.
>>Я так понимаю, проблема с настройкой самого unixODBC. Может кто подскажет как
>>быть. Весь гугл облазил, не пойму, такое ощущение, что Аксесовские базы
>>и альтернативные кодировки - вещи несовместимая..
>>Заранее спасибо! )
>
>$perl test_query_ODBC.pl|head | iconv -t utf-8
>так нормально отображает?нет.. я всю базу хотел сначала через iconv прогнать) конечно ничего не вышло.
>[оверквотинг удален]
>>>Я так понимаю, проблема с настройкой самого unixODBC. Может кто подскажет как
>>>быть. Весь гугл облазил, не пойму, такое ощущение, что Аксесовские базы
>>>и альтернативные кодировки - вещи несовместимая..
>>>Заранее спасибо! )
>>
>>$perl test_query_ODBC.pl|head | iconv -t utf-8
>>так нормально отображает?
>
>нет.. я всю базу хотел сначала через iconv прогнать) конечно ничего не
>вышло.а всё-же зачем ставить charset в cp1251 если он таки utf-8 -- перекодировкой ведь сам драйвер odbc должен заниматься.
>[оверквотинг удален]
>>>>Заранее спасибо! )
>>>
>>>$perl test_query_ODBC.pl|head | iconv -t utf-8
>>>так нормально отображает?
>>
>>нет.. я всю базу хотел сначала через iconv прогнать) конечно ничего не
>>вышло.
>
>а всё-же зачем ставить charset в cp1251 если он таки utf-8 --
>перекодировкой ведь сам драйвер odbc должен заниматься.Да. забыл написать - эти строчки "Charset" и "Servercharset" я уже потом поставил. они не влияют на работу. Сначала я ставил только "Servercharset" - не помогло. Затем на всякий случай просто "Charset". Такое ощущение что unixODBC не понимает эти строчки..
>[оверквотинг удален]
>>>нет.. я всю базу хотел сначала через iconv прогнать) конечно ничего не
>>>вышло.
>>
>>а всё-же зачем ставить charset в cp1251 если он таки utf-8 --
>>перекодировкой ведь сам драйвер odbc должен заниматься.
>
>Да. забыл написать - эти строчки "Charset" и "Servercharset" я уже потом
>поставил. они не влияют на работу. Сначала я ставил только "Servercharset"
>- не помогло. Затем на всякий случай просто "Charset". Такое ощущение
>что unixODBC не понимает эти строчки..http://www.easysoft.com/products/data_access/odbc_odbc_bridg...
может в данном случае поможет
>[оверквотинг удален]
>>>перекодировкой ведь сам драйвер odbc должен заниматься.
>>
>>Да. забыл написать - эти строчки "Charset" и "Servercharset" я уже потом
>>поставил. они не влияют на работу. Сначала я ставил только "Servercharset"
>>- не помогло. Затем на всякий случай просто "Charset". Такое ощущение
>>что unixODBC не понимает эти строчки..
>
>http://www.easysoft.com/products/data_access/odbc_odbc_bridg...
>
>может в данном случае поможетпохоже это платная штука.. шило на мыло выйдет, проще на аксесе оставить тогда уж. хотелось бы открытыми, ну или хотя бы бесплатными ср-вами это решить.
>[оверквотинг удален]
>>>- не помогло. Затем на всякий случай просто "Charset". Такое ощущение
>>>что unixODBC не понимает эти строчки..
>>
>>http://www.easysoft.com/products/data_access/odbc_odbc_bridg...
>>
>>может в данном случае поможет
>
>похоже это платная штука.. шило на мыло выйдет, проще на аксесе оставить
>тогда уж. хотелось бы открытыми, ну или хотя бы бесплатными ср-вами
>это решить.дык ведь тебе только на время переезда? -- а оно ^^ -- да trial
>[оверквотинг удален]
>>>http://www.easysoft.com/products/data_access/odbc_odbc_bridg...
>>>
>>>может в данном случае поможет
>>
>>похоже это платная штука.. шило на мыло выйдет, проще на аксесе оставить
>>тогда уж. хотелось бы открытыми, ну или хотя бы бесплатными ср-вами
>>это решить.
>
>дык ведь тебе только на время переезда? -- а оно ^^ --
>да trialок) попробую.. а у unixODBC всё плохо с кодировками, выходит?
>[оверквотинг удален]
>>>>может в данном случае поможет
>>>
>>>похоже это платная штука.. шило на мыло выйдет, проще на аксесе оставить
>>>тогда уж. хотелось бы открытыми, ну или хотя бы бесплатными ср-вами
>>>это решить.
>>
>>дык ведь тебе только на время переезда? -- а оно ^^ --
>>да trial
>
>ок) попробую.. а у unixODBC всё плохо с кодировками, выходит?если честно -- unixodbc особо никому не нужен (ИМХО) -- поэтому находится в таком состоянии.
а проблема с кодировками... я думаю что её как таковой нет, но разбираться если честно нет желания.
>[оверквотинг удален]
>>>Я так понимаю, проблема с настройкой самого unixODBC. Может кто подскажет как
>>>быть. Весь гугл облазил, не пойму, такое ощущение, что Аксесовские базы
>>>и альтернативные кодировки - вещи несовместимая..
>>>Заранее спасибо! )
>>
>>$perl test_query_ODBC.pl|head | iconv -t utf-8
>>так нормально отображает?
>
>нет.. я всю базу хотел сначала через iconv прогнать) конечно ничего не
>вышло.в смысле, что при любом раскладе вопросики выдаёт.
т.е. ODBC как бы изначально не понимает кирилицу. И дальше уже что не делай на выходе всегда вопросики.
>Привет всем.
>Есть база mdb(M$ Access). Есть простенький интерфейс к ней(формы, отчеты), написанный ср-вами
>самого Access'а. Было принято решение уйти с Access'а на PostgreSQL(дабы отвязаться
>от пакета M$ Office). Хочется сделать такой переход плавным. Т.е. юзеры
>будут продолжать работать через интерфейс Аксеса, а я тем временем буду
>писать веб-интерфейс на Perl + DBI.Вот до этого места всё было чинно-благородно - прям бальзам на душу 0dmin'у :)
Но далее пошёл тяжелый бред. Совсем в смысле не туда :(>Подключаюсь к базе средствами DBI + ODBC.В общем-то работает.. кроме русского. кодировка CP1251 есесно.
>Имею:
># more /etc/unixODBC/odbc.iniИ далее всё ушло в обсуждение достоинств "никому не упершихся юник-одибисы"(С)pavel_simple
Неправильно это! Запомни: ___первейшая задача___ любого админа при встрече с M$ Access - срочно забрать у него данные и доверить хранение\обработку настоящему серверу!
То есть вместо вышеописанных страданий твои страдания должны быть:
1) Забрать данные из акцеса. Хоть в csv думпить - но НАДА!
2) Скормит их слонику, желательно с перекодировкой.
3) Настроить ODBC провайдера к слонику.
4) Жёстко искромсать оригинальный mdb-шник (КОПИЮ!) на предмет юзания табличек через пп №3Работает? Нет - ищешь где грабли и по новой.
А если заработало - не торопясь начинаешь перетягивать функционал в веб. И коннектишься к слонику а не к этому ... датабазу :)Такой паттерн был успешно применен мной в одной широко известной 3-х буквенной красно-белой^W красно-желтой буржуйской компании в 1999. Только вместо слоника был Informix IDS 9 ... Причем клиенты остались акцессные. Картинки\диаграмки оно рисует хорошо да :)