powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача UNICODE через ODBC
15 сообщений из 15, страница 1 из 1
Передача UNICODE через ODBC
    #32071047
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Под 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
Передача UNICODE через ODBC
    #32071050
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, что возвращает:
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
Передача UNICODE через ODBC
    #32071148
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"- основная кодировка 1251
- национальная кодировка UTF8 "

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

:(

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

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

Если ты подумал, что для базы одновременно используются две кодировки для хранения данных, ты просто ошибаешься.
...
Рейтинг: 0 / 0
Передача UNICODE через ODBC
    #32071399
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Передача UNICODE через ODBC
    #32071433
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же написал для чего основная: для текстов SQL и PL/SQL. Например ты пишешь текст запроса select * from clints_info where name_client='Петров'. Или в процедуре.

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

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

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

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

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


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