Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] Не сохраняются турецкие буквы в таблицу Oracle / 25 сообщений из 33, страница 1 из 2
29.04.2013, 11:39
    #38243676
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Здравствуйте.
Пишу программу которая извлекает данные из текстового файла в кодировке cp1254 (турецкий язык) и помещает их в таблицу базы данных Oracle с кодировкой CL8ISO8859P5. Для этого сделал таблицу с полями принимающими юникод (nvarchar2). Пробовал использовать библиотеку Encode, пробовал менять переменные окружения текущей сессии, но всё равно специфические турецкие буквы меняются на знаки вопроса (POL??PORT K??MYA SAN.VE T??C.A.??.) или в таблицу вставляются пустые строки. Если считанные данные вставлять в другой текстовый файл, то буквы сохраняются, и если сделать вставку из другой таблицы, где уже есть турецкие буквы, в таблицу используя запрос, минуя переменные, то буквы тоже сохраняются. Пробовал получить дамп строки до всех преобразований, получил POL\x{130}PORT K\x{130}MYA SAN.VE T\x{130}C.A.\x{15e}. Помогите пожалуйста, уже три недели мучаюсь.

Код: php
1.
2.
3.
$ENV{ORA_NCHAR_LITERAL_REPLACE} = 'TRUE';
$ENV{NLS_DATE_FORMAT} = 'DDMMYYYY';
$ENV{NLS_LANG} = "AMERICAN_AMERICA.TR8MSWIN1254";



Код: php
1.
open OUTFILE, "<:encoding(cp1254)", $in_file || die "Error open file ${file_name}: $!";



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
$l_temp_3 = $col_09;
$insert1 = "INSERT INTO xxfin.xxfin_test_load_file_2
                   (text_tr,
                    text_en,
                    creation_date)
                 VALUES
                   (?, 
                    ?,
                    sysdate)";
     $i1 = $dbh_ora->prepare($insert1);
     if (!$i1) 
       {
        print STDERR "Error:" . $dbh_ora->errstr() . "\n";
        exit 1;
       }
              
     Encode::from_to($l_temp_3, 'cp1254', 'UTF-16BE');
     
     $i1->bind_param(1, $l_temp_3);
     $i1->bind_param(2, $col_09);
     if (!$i1->execute())
       {
        print STDERR "Error:" . $i1->errstr() . "\n";
        exit 1;
       }
     $i1->finish();
...
Рейтинг: 0 / 0
30.04.2013, 09:06
    #38244771
Gijad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
mops,
Забудьте про все эти кодировки. Приводите всё к unicode.
...
Рейтинг: 0 / 0
30.04.2013, 13:51
    #38245218
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Gijadmops,
Забудьте про все эти кодировки. Приводите всё к unicode.
Да я бы с радостью, что в принципе и пытаюсь сделать
Код: php
1.
2.
Encode::_utf8_off($l_temp_3);
Encode::from_to($l_temp_3, 'cp1254', 'UTF-16BE');


Но в таблицу вставляются пустые значения.

Пробовал приводить данные к utf8, тогда в таблицу вставляется POL????PORT K????MYA SAN.VE T????C.A.?????.
...
Рейтинг: 0 / 0
30.04.2013, 14:03
    #38245237
mhx
mhx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Был бы мускуль, вам бы тут быстро кучу советов надавали, а так...
...
Рейтинг: 0 / 0
30.04.2013, 14:28
    #38245272
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
mhx,
Мне кажется здесь дело не в базе данных, а в способе передать в неё данные в нужном виде. Где то происходит неявная перекодировка данных, потому что схема insert into <table1> select <field> from <table2> проходит без проблем.
...
Рейтинг: 0 / 0
30.04.2013, 14:36
    #38245282
S_Andrey_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
А с Ораклом через что соединяешься?
...
Рейтинг: 0 / 0
30.04.2013, 14:39
    #38245286
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
S_Andrey_A,

С помощью клиента ораклового
...
Рейтинг: 0 / 0
30.04.2013, 14:43
    #38245292
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
S_Andrey_A,

Если ты про библиотеки, то использую в программе
Код: php
1.
2.
use DBI qw(:sql_types);
use DBD::Oracle qw(:ora_types);
...
Рейтинг: 0 / 0
30.04.2013, 14:50
    #38245312
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Вернее только
Код: php
1.
use DBI qw(:sql_types);



Вот полный текст программы
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
#!/usr/local/bin/perl                                     
#
#

  use DBI qw(:sql_types);
#  use DBD::Oracle qw(:ora_types);
  use Encode qw(encode decode from_to);
  use File::Copy;
  use strict;
  use utf8;
  use open qw(:std :utf8); 
  use Data::Dumper;
#  use Text::Iconv;
#------ my parameters --------------
  my $org_id;
  my $file_name;
  my $user;
  my $password;
  my $dsn_ora;
  my $dbh_ora;
  my $sys_arg;
  my $my_arg;
  my $all_arg;
  my $pone;
  my @p_arg;
  my $j;
  my $in_file;
  my $str;
#-----------------------------------
  my $col_01;
  my $col_02;  
  my $col_03;
  my $col_04;
  my $col_05;
  my $col_06;
  my $col_07;
  my $col_08;
  my $col_09;
  my $col_10;
  my $col_11;
  my $col_12;
#-----------------------------------
  my $insert1;
  my $i1;
#-----------------------------------
  my $FCP_LOGIN;
  my $l_temp_3;
  
  binmode (STDERR, ':utf8');

  my $OA_HTML = $ENV{OA_HTML};
  my $APPL_OUT = $ENV{APPLCSF}.'/'.$ENV{APPLOUT};
  my $APPL_TOP = $ENV{APPL_TOP};

  if (@ARGV[0] eq '')
    {
     print "Error! No enter parameters. \n";
     exit(1);
    }  

## for 11i
##------------------------------------------------
  $all_arg = @ARGV[0];
    $pone=0;
    
     for ($j = 1; $j < scalar(@ARGV); ++$j){
       if((@ARGV[$j] =~ /^\"(\S+)\"/i)&&($pone==0)){
          $all_arg .= '  ' . @ARGV[$j];
	   $pone = 1;
	      }else{
	          $all_arg .= ' ' . @ARGV[$j];
		    }
		     }

### divide system and user parameters

  ($sys_arg, $my_arg ) = split(/  /, $all_arg);               

### take array @p_arg user parameters

  $my_arg = substr($my_arg, 1, length($my_arg)-2);

  @p_arg = split(/" "/, $my_arg);

  print STDERR "Start with parameters:\n";

  $org_id = @p_arg[0];
  $file_name = @p_arg[1];

  print STDERR "Org_id = $org_id \nFile_name = $file_name \n";

### Look system parameters
   if($sys_arg =~ /FCP_REQID=(\S+)\s+/i){
      print STDERR "FCP_REQID = $1\n";
      my $FCP_REQID = $1;
   }else{
      print STDERR "No parameter FCP_REQID\n";
      exit(1);
   }

   if($sys_arg =~ /FCP_LOGIN=\"(\S+)\"\s+/i){
      $FCP_LOGIN = $1;
   }else{
      print STDERR "No parameter FCP_LOGIN\n";
      exit(1);
   }

   if($sys_arg =~ /FCP_USERNAME=\"(\S+)\"\s+/i){
      my $FCP_USERNAME = substr($1,0,8);
   }else{
      print STDERR "No parameter FCP_USERNAME\n";
      exit(1);
   }

  $user = $FCP_LOGIN;
  $password = '';

  $ENV{ORA_NCHAR_LITERAL_REPLACE} = 'TRUE';
  $ENV{NLS_DATE_FORMAT} = 'DDMMYYYY';
  $ENV{NLS_LANG} = "TURKISH_TURKEY.TR8MSWIN1254";

##------ Connect --------------  
   $dsn_ora = 'dbi:Oracle:';
   $dbh_ora = DBI->connect($dsn_ora, $user, $password, {AutoCommit => 0});
   $dbh_ora->{pg_enable_utf8} = 1;
   if (!$dbh_ora) {
      print STDERR "\nConnection error\n";
      print STDERR "Error:" . $DBI::errstr . "\n";
      exit 1;
   }

   $dbh_ora->{LongReadLen} = 512 * 1024;

##---------- Open file -----------------
  $in_file = "${APPL_TOP}/xxupload/${file_name}";
  open OUTFILE, "<:encoding(cp1254)", $in_file || die "Error open file ${file_name}: $!";
#---------------------------------------
  while (<OUTFILE>)
    {
     $str = $_;
     next if (substr($str, 0, 1) eq '-');
     #------------------------------------------
     $col_01 = substr($str, 0, 5);     # B SUB
     $col_02 = substr($str, 6, 7);     # B HESAP
     $col_03 = substr($str, 14, 4);    # BNK
     $col_04 = substr($str, 19, 5);    # SUBE
     $col_05 = substr($str, 25, 19);   # ALACAK HESAP
     $col_06 = substr($str, 45, 18);   # TUTAR
     $col_07 = substr($str, 64, 3);    # DVZ
     $col_08 = substr($str, 68, 10);   # VADE TAR
     $col_09 = substr($str, 79, 30);   # ALACAKLI ADI
     $col_10 = substr($str, 110, 50);  # TGB HESAP ADI
     $col_11 = substr($str, 161, 40);  # ISLEM ACIKLAMASI
     $col_12 = substr($str, 202, 26);  # IBAN

     $insert1 = "INSERT INTO xxfin.xxfin_test_load_file_2
                   (text_tr,
                    text_en,
                    creation_date)
                 VALUES
                   (?, 
                    ?,
                    sysdate)";
     $i1 = $dbh_ora->prepare($insert1);
     if (!$i1) 
       {
        print STDERR "Error:" . $dbh_ora->errstr() . "\n";
        exit 1;
       }
     
     print STDERR "Dump col_09 = ", Dumper $col_09;
     print STDERR "1 col_09 = $col_09\n"; 
     print STDERR "\n";

     $l_temp_3 = $col_09;

     Encode::_utf8_off($l_temp_3);
     Encode::from_to($l_temp_3, 'cp1254', 'UTF-16BE');
#     Encode::_utf8_on($l_temp_3);
     print STDERR "Dump l_temp_3 = ", Dumper $l_temp_3;
     print STDERR "\n";
     print STDERR "1 l_temp_3 = $l_temp_3\n";
     printf STDERR ("2 l_temp_3 = %s\n", $l_temp_3);
     print STDERR "==============\n";

     $i1->bind_param(1, $l_temp_3);
     $i1->bind_param(2, $col_09, SQL_LONGVARCHAR);
     if (!$i1->execute())
       {
        print STDERR "Error:" . $i1->errstr() . "\n";
        exit 1;
       }
     $i1->finish();

    } #----------- while

  close STDERR;
  close OUTFILE;

  $dbh_ora->commit() or die "Error commit: $DBI::errstr\n";
  $dbh_ora->disconnect or warn "Error disconect: $DBI::errstr\n";
...
Рейтинг: 0 / 0
30.04.2013, 14:53
    #38245318
S_Andrey_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
А NLS_LANG какой выставлен?
...
Рейтинг: 0 / 0
30.04.2013, 14:56
    #38245324
S_Andrey_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Ну получается ты все конвертируешь в UTF а Оракл ждет турецкие буквы.
...
Рейтинг: 0 / 0
06.05.2013, 06:52
    #38248458
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
S_Andrey_A,
Я пробовал разные NLS_LANG выставлять, не помогает.

База данных имеет кодировку CL8ISO8859P5, она не поймёт турецкие буквы. Единственный выход создавать юникодные поля в таблице (nvarchar2). Именно в формате UTF там и хранятся данные, это проверено когда делал обратную операцию, извлекал данные и таблицы и конвертировал их в турецкую кодировку и вставлял в файл и отправлял туркам (из UTF-16BE в cp1254).
...
Рейтинг: 0 / 0
06.05.2013, 10:28
    #38248599
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
А sqlldr - точно не загружает?
mopsБаза данных имеет кодировку CL8ISO8859P5, она не поймёт турецкие буквы
а зачем ей говорить что они турецкие. Может ее обмануть и сказать что они как раз кирилические однобайтные 8859-5.
При загрузке в поле varchar2.
И перлу сказать то же самое. Байт - он байт и есть. Вот пусть и грузит. А как они потом покажуться - как клиент настроен? Ведь иногда же varchar2 поля выгружаются на нормальном (турецком) языке.
...
Рейтинг: 0 / 0
06.05.2013, 10:51
    #38248635
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Vladimir Baskakov,

Не получится, в турецком языке есть буквы которых нет в кирилице, а с ними как раз и проблема, поэтому не получится сохранить их как кирилические. А выгрузка из таблицы и загрузка в таблицу проходила только с полями nvarchar2.
...
Рейтинг: 0 / 0
06.05.2013, 10:54
    #38248643
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Турецкая кодировка однобайтная?
TR8MSWIN1254?
И русская - однобайтная?
Так в каком смысле в русском языке нет турецких букв, а в турецком - русских?
если все 256 байтов - есть.
...
Рейтинг: 0 / 0
06.05.2013, 11:54
    #38248736
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Vladimir Baskakov,

Я вас понял.
Сообщил программе что у меня файл написан на кирилице
Код: php
1.
open OUTFILE, "<:encoding(iso-8859-5)", $in_file || die "Error open file ${file_name}: $!";


Убрал все перекодировки и просто вставил то что извлёк в таблицу.
По дампу видно что турецкие буквы были восприняты как русские POL\x{43d}PORT K\x{43d}MYA SAN.VE T\x{43d}C.A.\x{43e}. Получается строчка POLнPORT KнMYA SAN.VE TнC.A.о., но я не уверен что турки захотят что то городить у себя чтобы преобразовать эти русские буквы в свои турецкие, там нет программистов кто бы смог за это взяться.
...
Рейтинг: 0 / 0
06.05.2013, 12:03
    #38248745
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
А тип поля какой - юникодный или "нормальный"?
Я то говорю про varchar2, однобайтные поля.
mopsпотому что схема insert into <table1> select <field> from <table2> проходит без проблем.
какого типа поля в <table2> ? юникодные или однобайтные?

Если турки уже съели varchar2 - поля в русской локализации базы - то пусть и дальше едят.
(это конечно наверное нехорошо....)
...
Рейтинг: 0 / 0
06.05.2013, 12:37
    #38248791
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Vladimir Baskakov,

Попробовал вставлять в поля разных типов. Если включена переменная окружения $ENV{NLS_LANG} = "TURKISH_TURKEY.TR8MSWIN1254", то и в varchar2 и в nvarchar2 вставляется POL??PORT K??MYA SAN.VE T??C.A.??. Убрав эту строчку получается POLаНPORT KаНMYA SAN.VE TаНC.A.аО., и в varchar2 и в nvarchar2, видно что турецкие буквы заменились на два символа аН и аО. Хотя в дампе по прежнему показывается POL\x{43d}PORT K\x{43d}MYA SAN.VE T\x{43d}C.A.\x{43e}.

А insert из таблицы в таблицу я делал на юникодных полях.
...
Рейтинг: 0 / 0
06.05.2013, 12:49
    #38248812
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Получается хоть я и указываю кодировку файла
Код: php
1.
open OUTFILE, "<:encoding(iso-8859-5)", $in_file || die "Error open file ${file_name}: $!";

Всё равно турецкие буквы считываются как юникодные, а при вставке четыре символа из юникодного кода разбиваются по два они уже отображаются, что является неверным.
...
Рейтинг: 0 / 0
06.05.2013, 13:19
    #38248857
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
да не в этом дело.
либо
$dbh_ora->{pg_enable_utf8} = 1;
либо
use utf8;

либо, что самое вероятное
Encode::from_to($l_temp_3, 'cp1254', 'UTF-16BE');
- не надо ничего перекодировать! В UTF.

Попробуйте убрать эти строчки, пусть байты будут просто байтами, как они прочлись из файла!
(ну - по моему мнению).

У вас в тех varchar2() полях где уже есть - такие же сырые байты и положены (вероятно)
- ну или покажите определения полей где турецкие буковки залиты уже.
Если Вы их через SQLPlus выгрузите - оно и будет видно. (наверное)

залейте одну строчку через SQLLoader. Указав ему, что кодировка файла УЖЕ такая, как установлена в базе, и НЕ НАДО ничего делать кроме как заливать. НЕ НАДО решать какие буквы есть, каких - нет, не надо ничего перекодировать.


Выгрузите пару строчек из таблиц где турецкие буковки нормальные через SQLPLus, посмотрите - будет ли кодировка 1254, если нет - какая?

Выполните тест на перле - подконнектится, выполнить 1 жесткий инсерт без связанных переменных, безо всяких UTF. Правильно вставит? или нет. Потом его же с забинденными переменными, но без перекодировок, значения - константами в тексте скрипта. турецкими буквами в 1254.

Пройдет? тогда прикручивайте чтение из файла и все остальное....
Ну а потом допиливайте с установками NLS_..... для переносимости между компьютерами с разными настройками......
...
Рейтинг: 0 / 0
06.05.2013, 13:32
    #38248880
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
про юникод

http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm

CPAN use DBD::Oracle qw( SQLCS_IMPLICIT SQLCS_NCHAR );
...
$sth->bind_param(1, $value, { ora_csform => SQLCS_NCHAR } );
Говорят, что юникодные параметры надо биндить с довеском? не знаю, не пробовал.

Дальше. Про
$dbh_ora->{pg_enable_utf8} = 1;
- гугл говорит, что это флаг от постргесса.

На оракловой странице CPAN его нет.
...
Рейтинг: 0 / 0
06.05.2013, 13:45
    #38248908
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
дальше, попробуйте в среде разработки вставить запись с осмысленными турецкими буковками.
Если получится - посмотрите на языковые параметры в
select * from v$nls_parameters, выставьте аналогичные в PERL.
...
Рейтинг: 0 / 0
06.05.2013, 13:55
    #38248931
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
ничего не говорили про
NLS_NCHAR_CHARACTERSET.
Он какой?
Заведите тему аналогичную в разделе Oracle, там могут понять причину быстрее.

прагма
PERLDOCutf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code http://perldoc.perl.org/utf8.html

Не влияет на прочитывание файла. Только на интерпретацию исходника. Оно зачем? в перлушке юникодных турецких букв нет.

Какой сейчас ип поля у text_tr ?
...
Рейтинг: 0 / 0
06.05.2013, 15:31
    #38249168
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Vladimir Baskakov,

Дело в том что я сейчас тренеруюсь на базе данных своего предприятия, здесь кодировка русская, и турецкие буквы я сохранял в полях типа nvarchar2(500). В дальнейшем буду цепляться через дблинк к турецкой базе и сохранять данные там (изначально я тренеровался на турецкой базе, но затем когда у меня возникли трудности, чтобы не забивать канал связи частыми запусками программы, я переключил свои тренеровки на нашу базу, что наверное неправильно, нужно снова вернуться на использование турецкой базы). Через тот же дблинк я забирал данные из Турции и вставлял в "русскую" таблицу в поля с типом nvarchar2 по схеме insert into <table1> select <field> from <table2>.

Прямую вставку из среды разработки я пробовал, в консоле запускал sqlplus, менял настройки сессии на турецкии и делал вставку. Вставку я делал в "русскую" базу в поле с типом nvarchar2.

Параметр NLS_NCHAR_CHARACTERSET что в турецкой базе, что в нашей AL16UTF16

Убрал вызов use utf8

Тип поля text_tr - nvarchar2(500). Я сделал аналогичное поле text_vr с типом varchar2(500) и сразу пробую вставить и в него.

Про довесок в параметрам вставке я встречал в просторах интернета и пробовал некоторые, они реально меняют результат вставки, но пока не нашёл все возможные значения этого параметра.
...
Рейтинг: 0 / 0
06.05.2013, 15:41
    #38249195
mops
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Не сохраняются турецкие буквы в таблицу Oracle
Vladimir Baskakov,

Отказался от всех перекодировок, сделал в турецкой таблице поле с типом varchar2 и пробую вставить данные из файла туда. До этого пытался вставить в поля с типом nvarchar2, не знаю что на меня нашло, для их базы это же родной язык и она кодировку воспримет и без юникода. Но пока тоже не получается, если менять настройки сессии $ENV{NLS_LANG} = "TURKISH_TURKEY.TR8MSWIN1254"; то вставляется POL??PORT K??MYA SAN.VE T??C.A.??., если убрать смену настроек сессии, то вставляется POLФАPORT KФАMYA SAN.VE TФАC.A.Х?.

Попробую порыть в сторону довеска к параметрам вставки. Спасибо за помощь Владимир, о результатах отпишусь.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] Не сохраняются турецкие буквы в таблицу Oracle / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]