![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
с windows я не работал.
|
|||
|
||||
| infarch |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Я склоняюсь к тому что проблема не сервере базы данных. Мне таки удалось передать юникод с линукса в базу. Однако скрипт запускался апачем и принимал данные из CGI. Далее, я использовал не плейсхолдеры, а прямой запрос. Вот так:
B таком варианте я получил в базе корректные данные. Если же я использовал плейсхолдеры то картина иная. Вот такой вот скрипт:
При вставке строки из цифр и английских символов все хорошо. Если же субмитнуть еще и русские и прочие юникодные символы то вставляется пустое значение. Прямое указание типа при байнде ничего не изменило:
Однако мне очень нужны плейсхолдеры, это ключевой момент в проекте. И поэтому я буду крайне благодарен за помощь. Еще один момент... Я пробовал связаться с базой используя unixODBC и драйвер для sql server от EasySoft. Плейсхолдеры заработали, но кричать Ура рано: во-первых там надо указывать тип данных, причем всегда ("$sth->bind_param(1, $string, {TYPE => SQL_WVARCHAR});"), во-вторых драйвер платный и нужная лицензия потянет евро так на 5000. Так что фритдс и сибейс крайне желательны. Это сообщение отредактировал(а) infarch - 7.9.2012, 12:09 |
||||||
|
|||||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# LC_ALL=en_GB.UTF-8 SYBASE=/opt/sybase perl -CSA -MDBI -MDBD::Sybase -le '$dbi = DBI->connect(@ARGV[0,1,2]) or die $DBI::errstr; $sth = $dbi->prepare("insert into test(name) values (?)") or die $dbh->errstr; $sth->execute($ARGV[3]);' "dbi:Sybase:server=A;database=pubs3;charset=utf8" "sa" "pass" "В том то и дело что читал + 1"
# sqsh -S A -U sa -P pass -p -Dpubs3 -C "select * from test;" ... name -------------------------------------------------------------------------------- test В том то и дело что читал В том то и дело что читал + 1 (3 rows affected) Clock Time (sec.): Total = 0.001 Avg = 0.001 (895.26 xacts per sec.) # ldd /usr/local/lib/perl/5.12.4/auto/DBD/Sybase/Sybase.so linux-vdso.so.1 => (0x00007fff64b59000) libsybct64.so => /opt/sybase/OCS-15_0/lib/libsybct64.so (0x00002b8d985d0000) libsybcs64.so => /opt/sybase/OCS-15_0/lib/libsybcs64.so (0x00002b8d98868000) libsybblk64.so => /opt/sybase/OCS-15_0/lib/libsybblk64.so (0x00002b8d98a7c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00002b8d98cbe000) libsybtcl64.so => /opt/sybase/OCS-15_0/lib/libsybtcl64.so (0x00002b8d9905f000) libsybcomn64.so => /opt/sybase/OCS-15_0/lib/libsybcomn64.so (0x00002b8d99287000) libsybintl64.so => /opt/sybase/OCS-15_0/lib/libsybintl64.so (0x00002b8d99545000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00002b8d9974e000) libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00002b8d99953000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00002b8d99b6d000) libsybunic64.so => /opt/sybase/OCS-15_0/lib/libsybunic64.so (0x00002b8d99df1000) /lib64/ld-linux-x86-64.so.2 (0x00002b8d9818a000) # Как видно работает. Правда DBD слинкован с оригинальными библиотеками, не с TDS. Попробуйте выставить LC_ALL как у меня, если не заработает, попробуйте взять с sybase.com библиотеки. |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Выставил LC_ALL, ничего не изменилось.
test-deployer@linux-bw-test:/usr/local/lib/perl/5.8.8/auto/DBD/Sybase$ ldd Sybase.so libct.so.4 => /usr/local/freetds/lib/libct.so.4 (0x00002ac5ff4f5000) libtds.so.5 => /usr/local/freetds/lib/libtds.so.5 (0x00002ac5ff749000) libdl.so.2 => /lib/libdl.so.2 (0x00002ac5ff98c000) libm.so.6 => /lib/libm.so.6 (0x00002ac5ffb90000) libc.so.6 => /lib/libc.so.6 (0x00002ac5ffe12000) librt.so.1 => /lib/librt.so.1 (0x00002ac600164000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002ac60036d000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) Вам это о чем либо говорит? На сибейсе вообще непонятно где качать либы ( Можете дать ссылку? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
у вас слинковано с FreeTDS.
ASE for Linux смотреть здесь: http://response.sybase.com/forms/ASE_Linux_Download Я не помню, поставляют они библиотеки для клиента отдельно, или нет. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
btw, вы читали README.freetds из DBD::Sybase?
Missing Features: ----------------- * ?-style placeholders are not supported. * Setting $dbh->{LongReadLen} doesn't work Use $dbh->do("set textsize <value>") instead. * The special text/image handling functions don't work (i.e. ct_fetch_data(), etc). * The $dbh->{syb_row_count} attribute doesn't work. Use $dbh->do("set rowcount <value>") instead. * The $dbh->{syb_quoted_identifier} attribute doesn't work. Use $dbh->do("set quoted_identifier <value>") instead. |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Боюсь я что клиент не захочет ставить еще и это :( 800 метров, явно не только либы там лежат... Кстати, гляньте вот на это: http://www.nntp.perl.org/group/perl.dbi.us...0/msg34271.html
Вы не знаеет о чем там речь? Что это за unixODBC/CVS + FreeTDS/CVS? Добавлено через 2 минуты и 36 секунд
Не читал... Действительно, намек прозрачный. Но ведь они таки работают! Только с юникодом проблема, а так то все в порядке. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
вы какую версию протокола поставили в freetds.conf?
и какую поддерживает ваш сервер? у меня на сервере ASE 15.7.0, прописал tds version = 5.0, и отработало perl -Mblib -CSA -MDBI -MDBD::Sybase -le '$dbi = DBI->connect(@ARGV[0,1,2]) or die $DBI::errstr; $sth = $dbi->prepare("insert into test(name) values (?)") or die $dbh->errstr; $sth->execute($ARGV[3]);' "dbi:Sybase:server=A;charset=utf8;database=pubs3" |
|||
|
||||
| urbano |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 15.3.2012 Репутация: нет Всего: нет |
в Дойч банк'е программируете?
они там поддерживает одну систему на perl и она через 1 год само уничтожиться весь проект на разных языках |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
это кому вопрос?
|
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Я не в Дойч, но система на перл, жава, сишарп... Уже лет 10 как живет, и умирать пока не собирается
|
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Кстати, я вот еще что заметил: сибейс не возвращает мне юникодные строки с выставленным флагом ютф.
На проверке получаю ноль, хотя выставил и charset=utf8, и syb_enable_utf8=>1. А если под виндой, через ODBC, то выставляет флаг коректно. Не подскажете как это вылечить? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -Mutf8 -Mblib -CSA -MDBI -MDBD::Sybase -le '$dbi = DBI->connect(@ARGV[0,1,2]) or die $DBI::errstr; $sth = $dbi->prepare("select * from test") or die $dbh->errstr; $sth->execute(); while (my ( $a ) = $sth->fetchrow) { utf8::decode($a); print $a }' "dbi:Sybase:server=A;charset=utf8;database=pubs3" "sa" "pass"
test В том то и дело что читал В том то и дело что читал + 1 |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Вы используете decode... Следует ли это понимать так что вы тоже получаете строки без флага? Так я как раз и хочу это исправить... Или о чем вы хотели сказать?
|
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
В общем я понял что с сибейс каши не сваришь... И в результате переехал на DBD::ODBC. Использую UnixODBC и FreeTDS как драйвер. И все заработало. Закрываю тему.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |