powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Oracle again
14 сообщений из 14, страница 1 из 1
Oracle again
    #34608795
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня опять вопрос по Oracle . Имеем:

PowerBuilder 10.5.1 Build 6565
Oracle 10g
Соединение с базой идет через драйвер Oracle in OraHome92, version 9.02.00.00.
Настройки для ODBC оставлены такими, какими они есть по умолчанию.

Database Profiles в PowerBuilder :
// Profile My_Test
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=ODBC_TEST;UID=USERTEST;PWD=[EQDFV',PBCatalogOwner='USERTEST'"

Вот законектился к нашему новому серверу. Заметил, что при создании DataWindow
возникает вот что:

Если поле в базе varchar2(50) , то данное поле создается в DataWindow , как
char(150) . Для char(1) - char(3)

С чем может быть связано увеличение длины стринговых полей ровно в три раза? Видимо, с кодировкой базы?
...
Рейтинг: 0 / 0
Oracle again
    #34609164
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так думаю, это значит что ODBC возвращает char 150.
..а галочка UTF8 не помогает?
...
Рейтинг: 0 / 0
Oracle again
    #34609665
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry...а галочка UTF8 не помогает?
Что за галку ты имеешь ввиду? На вкладках, связанных с настройками источника ODBC,
такой галки нет. Если речь идет про Database Profiles , то вкладка EAServer/COM+ ,
здесь явно не при делах. Есть, конечно, UTF8 database parameter , которую можно выставить
через SQLCA.DBParm = "UTF8=1" , но судя по Help -у, эта опция применима только к:
Код: plaintext
1.
ASE, SYC and SYJ Sybase Adaptive Server Enterprise
DIR Sybase DirectConnect

Может, я тебя не так понял? Поясни свою мысль. Кстате, а как можно проверить, что у оракловой
базы действительно стоит юникодная кодировка?
...
Рейтинг: 0 / 0
Oracle again
    #34609778
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... да. я о database profiles/
вот и прочитал что это только для sybase :)
...
Рейтинг: 0 / 0
Oracle again
    #34609985
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Black SavageС чем может быть связано увеличение длины стринговых полей ровно в три раза? Видимо, с кодировкой базы?
Может быть и в 4 раза:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> select parameter, value 
   2   from NLS_DATABASE_PARAMETERS 
   3   where parameter = 'NLS_CHARACTERSET';

PARAMETER            VALUE
-------------------- --------------------
NLS_CHARACTERSET     AL32UTF8

SQL> create table TEST (c char( 1 ), v varchar2( 50 ));

Table created.

SQL> select table_name, column_name, data_type, data_length, char_length
   2   from COLS
   3   where table_name = 'TEST';

TABLE_NAME COLUMN_NAME     DATA_TYPE  DATA_LENGTH CHAR_LENGTH
---------- --------------- ---------- ----------- -----------
TEST       C               CHAR                  4             1 
TEST       V               VARCHAR2            200            50 
Видать, длину поля PowerBuilder определяет из DATA_LENGTH, а не из CHAR_LENGTH.
...
Рейтинг: 0 / 0
Oracle again
    #34610076
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovВидать, длину поля PowerBuilder определяет из DATA_LENGTH, а не из CHAR_LENGTH.Тогда уж, не эхотаг, а ODBC драйвер.
...
Рейтинг: 0 / 0
Oracle again
    #34610095
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Тогда уж, не эхотаг, а ODBC драйвер.
Black SavageЕсли поле в базе varchar2(50), то данное поле создается в DataWindow , как char(150). Для char(1) - char(3)
Всё-таки эхотаг.
...
Рейтинг: 0 / 0
Oracle again
    #34610099
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вот что получилось:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT parameter,
  VALUE
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';

PARAMETER                      VALUE                                    
------------------------------ ---------------------------------------- 
NLS_CHARACTERSET               UTF8                                     

 1  rows selected
Видимо, так можно понять какая кодировка стоит у базы. Спасибо, не знал этого.

При селекте из уже сужествующей таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE "MY_TABLE" ("TCMPPROG" NUMBER( 9 , 0 ) NOT NULL ENABLE,
"TCMPDESC" VARCHAR2( 50  CHAR) NOT NULL ENABLE, "TCMPNOTEMOD" VARCHAR2( 256  CHAR));

SELECT TABLE_NAME,
  column_name,
  data_type,
  data_length,
  CHAR_LENGTH
FROM cols
WHERE TABLE_NAME = 'MY_TABLE';

TABLE_NAME   COLUMN_NAME   DATA_TYPE  DATA_LENGTH  CHAR_LENGTH            
-----------     -------------    ----------    ------------     ----------------
MY_TABLE      TCMPPROG        NUMBER          22                   0                       
MY_TABLE      TCMPDESC        VARCHAR2      150                  50                      
MY_TABLE      TCMPNOTEMOD  VARCHAR2      768                  256 
...
Рейтинг: 0 / 0
Oracle again
    #34610109
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, за плохое форматирование.

Да, похоже, дело в кодировке базы или, как написал PL99 , в ODBC драйвере.
...
Рейтинг: 0 / 0
Oracle again
    #34610159
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Denis Popov
А можно как-то это исправить? Дайте совет, только нужны очень серьезные аргументы,
чтобы подкрутить базу, желательно подкрепленные из авторитетных источников на
аглицком языке, а то меня просто нах пошлют. Конечно, можно и так, как сейчас,
разрабатывать DataWindow , но уж больно не хорошо это. Раньше со старой базой (тоже
Oracle десятка и тот же драйвер) таких проблем не было...

To PL99
У меня тоже была мысль на драйвер. По идеи, драйвер то должен быть от десятки,
а не от девятки. Может в этом дело? Хотелось бы тоже развить это направление в решении
вопроса, просто так тоже никто драйвер менять не даст.
...
Рейтинг: 0 / 0
Oracle again
    #34610302
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Black Savage To Denis Popov
А можно как-то это исправить? Дайте совет, только нужны очень серьезные аргументы, чтобы подкрутить базу, желательно подкрепленные из авторитетных источников на аглицком языке, а то меня просто нах пошлют.
Думаю, изменить данные в поле DATA_LENGTH, если база создана в юникоде, не получится. Остается решить, нужно ли использовать юникод в полях CHAR и VARCHAR2, для этого читать документацию (сайт требует бесплатной регистрации):

Oracle® Database Globalization Support Guide 10g Release 2 (10.2)
2 Choosing a Character Set
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14225/ch2charset.htm

Обдумайте ответы на вопросы под Choosing an Oracle Database Character Set , имхо интересно было бы узнать, например:
How well does the application handle the character set?

What are the performance implications of the character set?
и остальное тоже.
Black SavageРаньше со старой базой (тоже Oracle десятка и тот же драйвер) таких проблем не было...
Видать, старая база была создана не в юникодной кодировке. Заметь, что даже если кодировка базы не юникод, то наряду с типами CHAR, VARCHAR2 и т.п. есть еще типы NCHAR, NVARCHAR2 и т.д, позволяющие хранить данные различных языком. Тип кодировки для этих полей также определяется при создании БД и виден в NLS_DATABASE_PARAMETERS через параметр NLS_NCHAR_CHARACTERSET.
...
Рейтинг: 0 / 0
Oracle again
    #34610404
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Denis Popov
Спасибо, придется навоять соответствующее письмо омерикосам, вероятнее всего, пошлют нах :((

А что можно сказать по поводу влияния ODBC драйвера? Может, все-таки это он так себя ведет?
...
Рейтинг: 0 / 0
Oracle again
    #34610458
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Black SavageА что можно сказать по поводу влияния ODBC драйвера? Может, все-таки это он так себя ведет?
Да он-то имхо ни при чем, он честно выполняет sql-запросы, какие ему сказано, а интерпретировать их результаты - дело приложения, использующего этот драйвер.
...
Рейтинг: 0 / 0
Oracle again
    #34610619
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, раз других мнений нет, тогда всем СПАСИБО за ответы и участие.
Пошел писать пЫсьмо в Омерику ...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Oracle again
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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