Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача UNICODE через ODBC / 15 сообщений из 15, страница 1 из 1
21.11.2002, 19:12
    #32071047
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
Под Oracle 8.1.5 есть БД со следующими настройками языков:
- основная кодировка 1251
- национальная кодировка UTF8
Имеется также Oracle ODBC Driver версии 8.1.5.7.0.

Сейчас в теле запроса на вставку используется TRANSLATE(? USING NCHAR_CS), UNICODE строка перед вызовом SQLBindParameter конвертируется в 1251, биндится и выполняется запрос. В противном случае получается ошибка:
[Oracle][ODBC][Ora]ORA-12704: character set mismatch
HY000.

Вопрос:
Можно ли передать в NCHAR поле UNICODE строку без переконвертации ее в 1251?

PS: На 9.0.1.1.1 с теми же настройками БД, но с использованием UNISTR, результат тот же.
...
Рейтинг: 0 / 0
21.11.2002, 19:17
    #32071050
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
Вот, что возвращает:
select * from nls_database_parameters;

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8MSWIN1251
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-YY HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-YY HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY $
NLS_COMP
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 8.1.5.0.0
18 rows selected
...
Рейтинг: 0 / 0
22.11.2002, 09:36
    #32071148
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
"- основная кодировка 1251
- национальная кодировка UTF8 "

А кто подсказал что надо так делать? Надо было обе 1251 сделать
...
Рейтинг: 0 / 0
22.11.2002, 09:49
    #32071152
Ste@lth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
у меня тоже подобная ситуация
NLS_CHARACTERSET US7ASCII
NLS_NCHAR_CHARACTERSET AL16UTF16
естественно не работает конвертация букв между регистрами, может кто подскажет, что делать
...
Рейтинг: 0 / 0
22.11.2002, 10:58
    #32071194
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
To: softbuilder@inbox.ru

>> А кто подсказал что надо так делать?
>> Надо было обе 1251 сделать

Что бы мне это дало, если надо хранить и 1251, и Unicode?

To: All
Кто-нибудь из гуру может помочь?
...
Рейтинг: 0 / 0
22.11.2002, 11:01
    #32071201
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
"Что бы мне это дало, если надо хранить и 1251, и Unicode?"
Надо для чего?
...
Рейтинг: 0 / 0
22.11.2002, 11:06
    #32071204
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
>> Надо для чего?

Создается свое хранилище под MS Outlook, а у него есть два типа строк: ANSI и Unicode.

Решение-то я нашел, но оно, как следует из описания, кривое, т.к. при переконвертации Unicode -> ANSI, возможна потеря символов. К тому же Oracle потом все равно приводит полученную строку обратно к Unicode. Два лиших преобразования.

Под MS SQL 7/2K Unicode строки через API передаются как есть даже когда кодировка БД отлична от Unicode.
...
Рейтинг: 0 / 0
22.11.2002, 11:46
    #32071232
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
"т.к. при переконвертации Unicode -> ANSI, возможна потеря символов."

По идее никакой потери символов не должно быть. Вся первичная информация обычно поступает в кодировке ANSI, никакой проблемы при конвертации не должно быть.

Проблема обычно бывает в следующем: при конвертации программер считает что к нему пришла информация скажем в 1251, а реально она в koi8. Поэтому при конвертации в Unicode помещается неправильная информация. Естественно, что потом при обратной конвертации как не изощряйся ничего не получишь.
...
Рейтинг: 0 / 0
22.11.2002, 12:50
    #32071301
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
>> По идее никакой потери символов не должно быть.
>> Вся первичная информация обычно поступает в кодировке ANSI,
>> никакой проблемы при конвертации не должно быть.

Быть может, но все же мне интересно было бы узнать существует ли возможность передавать в Oracle строки в национальной кодировке, без преобразования к основной кодировке БД.

Как бы об этом и был вопрос, а то, что будет там потеря или нет, - уже мало интересно. Т.к., если существует такая возможность, ею надо пользоваться и не терзать себя вопросами как оно там дойдет до СУБД :)
...
Рейтинг: 0 / 0
22.11.2002, 13:38
    #32071330
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
Насколько я понимаю, Unicode использовать есть смысл, когда у тебя информация приходит в кодировках разных языков. Допустим, клиенты являются корейцами, русскими, китайцами, американцами. Корейцы и китайцы используют иероглифы, русские и американцы ANSI. Естественно что в этом случае или надо две базы создавать с разными кодировками или одну с Unicode.

Значит ты хочешь сказать, что твой случай именно этот?
...
Рейтинг: 0 / 0
22.11.2002, 13:50
    #32071340
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
>> Естественно что в этом случае или надо две базы создавать с разными кодировками или одну с Unicode.

Две базы держать расточительно, да и ссылочная целостность будет малость похрамывать... :)

Насчет создания одной БД с основной кодировкой Unicode идея и меня посещала, но тогда мои 1251 строки будут для нее национальными и потребуется явное преобразование, хотя я могу ошибаться и нормально пройдет неявное преобразование средствами самого Oracle.

>> Значит ты хочешь сказать, что твой случай именно этот?

Не совсем так... Мне нужны и ANSI, и Unicode строки одновременно.

Сделал вывод, что народ не практикует использование национальной кодировки, а работает только с основной.

:(

Тема похоже исчерпала себя.

Спасибо за участие.
...
Рейтинг: 0 / 0
22.11.2002, 14:10
    #32071354
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
Мне кажется ты неправильно понимаешь использования и предназначения кодировок. То что ты назвал "основной кодировкой" - эта кодировка используется не для хранения данных, а для хранения исходного кода SQL и PL/SQL. А национальная кодировка представяляет данные для данных.

Если ты подумал, что для базы одновременно используются две кодировки для хранения данных, ты просто ошибаешься.
...
Рейтинг: 0 / 0
22.11.2002, 15:16
    #32071399
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
To softbuilder@inbox.ru:
Ай-ай-ай... Нехорошо...

>> Если ты подумал, что для базы одновременно используются две кодировки
>> для хранения данных, ты просто ошибаешься.

Кажется тут заблуждение уже у тебя. Привожу выдержку из Oracle9i Globalization Support Guide Release 1 (9.0.1) (Part Number A90236-02), 2 - Choosing a Character Set, Restrictions on Character Sets Used to Express Names and Text:
The character encoding scheme used by the database is defined at database creation as part of the CREATE DATABASE statement. All SQL CHAR datatype columns (CHAR, CLOB, VARCHAR2, and LONG), including columns in the data dictionary, have their data stored in the database character set. In addition, the choice of database character set determines which characters can name objects in the database. SQL NCHAR datatype columns (NCHAR, NCLOB, and NVARCHAR2) use the national character set.

Ясно видно, что в БД используется __ДВЕ__ кодировки: основная (определяется параметром NLS_CHARACTERSET) и национальная (определяется параметром NLS_NCHAR_CHARACTERSET). Так же указывается для чего нужна каждая из них.

Иначе, зачем по твоему, при создании новой БД Oracle Database Configuration Assistant спрашивает параметры для database character set и national character set?

Ж:)
...
Рейтинг: 0 / 0
22.11.2002, 16:03
    #32071433
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
Я же написал для чего основная: для текстов SQL и PL/SQL. Например ты пишешь текст запроса select * from clints_info where name_client='Петров'. Или в процедуре.

А национальная используется для самих данных в таблицах
...
Рейтинг: 0 / 0
22.11.2002, 16:30
    #32071447
Fedorchenko Aleksey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача UNICODE через ODBC
To: softbuilder@inbox.ru

Так ведь и я о том же!!!
Помнишь чьи слова были:

Если ты подумал, что для базы одновременно используются две кодировки для хранения данных, ты просто ошибаешься.

Так вот, тут твоя ошибка. А с последним твоим постом я согласен на все 100%, это ясно как день.

Но не в тему :(
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача UNICODE через ODBC / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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