![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Здравствуйте.
Помогите пожалуйста понять в чем ошибка. Мне нужно вставить строку с юникодными символами в базу Sql Server. Написал простенький скрипт для тестирования. Работает нормально под виндой, но если запустить под убунту (сервер) то выдает ошибку. Вот скрипт:
Ошибка под убунтой (возникает при инсерте): DBD::Sybase::st execute failed: OpenClient message: LAYER = (0) ORIGIN = (0) SEVERITY = (9) NUMBER = (98) Server Byggeweb, database Byggeweb Message String: Error converting characters into server's character set. Some character(s) could not be converted Может кто подскажет как это лечить? Пишите, предоставлю любые нужные конфиги для анализа. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
указать charset?
|
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
А где указать то? Подскажите пожалуйста с примером )
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
похоже, документацию вы не читали.
perldoc DBD::Sybase |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
В том то и дело что читал, только вот не получилось у меня так сделать...
Если я писал конект в форме отличной от 'dbi:Sybase:Byggeweb',$constants{Database}{DB_USER}, $constants{Database}{DB_PASSWORD} то получал ошибку. Здесь dbi:Sybase:Byggeweb имя секции конфига FreeTDS. А там и написано как документация говорит: client charset = UTF-8 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# LC_ALL=en_GB.UTF-8 SYBASE=/opt/sybase perl -MDBI -MDBD::Sybase -le '$dbi = DBI->connect(@ARGV[0,1,2]) or die $DBI::errstr; $dbi->do("insert into test(name) values (''$ARGV[3]'')")' "dbi:Sybase:server=A;database=pubs3;charset=utf8" "sa" "pass" "В том то и дело что читал"
# sqsh -S A -U sa -P pass -p -Dpubs3 -C "select * from test;" 15:41 (0) ... name -------------------------------------------------------------------------------- test В том то и дело что читал (2 rows affected) Clock Time (sec.): Total = 0.001 Avg = 0.001 (915.75 xacts per sec.) # Это сообщение отредактировал(а) arto - 5.9.2012, 15:43 |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Ваши однострочники - сами по себе песня ) Спасибо, в таком варианте удалось установить связь с базой и не свалиться с ошибкой:
Однако ошибка осталась на месте: DBD::Sybase::st execute failed: OpenClient message: LAYER = (0) ORIGIN = (0) SEVERITY = (9) NUMBER = (98) Server Byggeweb, database Byggeweb Message String: Error converting characters into server's character set. Some character(s) could not be converted Позвольте спросить: что означает вот это # LC_ALL=en_GB.UTF-8 SYBASE=/opt/sybase ? Поясните пожалуйста человеку практически не знакомому с линуксом. Может тут у меня проблема? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
это переменные окружения.
а какой charset у таблицы стоит? и какую строку вы пытаетесь запихнуть? у нее utf8 флаг стоит? |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
test-deployer@linux-bw-test:~$ locale
LANG=en_DK.UTF-8 LC_CTYPE="en_DK.UTF-8" LC_NUMERIC="en_DK.UTF-8" LC_TIME="en_DK.UTF-8" LC_COLLATE="en_DK.UTF-8" LC_MONETARY="en_DK.UTF-8" LC_MESSAGES="en_DK.UTF-8" LC_PAPER="en_DK.UTF-8" LC_NAME="en_DK.UTF-8" LC_ADDRESS="en_DK.UTF-8" LC_TELEPHONE="en_DK.UTF-8" LC_MEASUREMENT="en_DK.UTF-8" LC_IDENTIFICATION="en_DK.UTF-8" LC_ALL= Засовываю в таблицу я вот это: my $string = "english \x{263a}"; Не знаю стоит ли там флаг, честно говоря я в этом перловом юникоде не силен. Подскажете как глянуть? Чарсет таблицы - что это? Колейшен базы данных SQL_Danish_Pref_CP1_CI_AS. Надо поменять? На какой? Поля в таблице nvarchar. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
у вас en_DK.utf8 в locales.dat есть?
попробуйте поставить use utf8. |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Подскажите, где искать этот locales.dat ? В папке freetds есть файл locales.conf, там прописано:
[en_DK] date format = %b %d %Y %I:%M%p language = us_english char set = utf8 use utf8 поставил, не помогло. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
на сервере, $SYBASE/locales/locales.dat
попробуйте установить флаг utf8 у строки и проверить его наличие (perldoc utf8) |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
echo $SYBASE вернул мне пустую строку. И судя по тому что мне попалось из информации, ставить его надо так: export SYBASE=/usr/local/freetds, указав куда поставлен фритдс. в той папке у меня locales.dat нет, только locales.conf
is_utf говорит что флаг выставлен |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
freetds -- это клиент.
вам надо смотреть на сервер, где вертится ваша база данных. |
|||
|
||||
| infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
База данных на виндовс машине. А что там смотреть то?
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |