Как я могу хранить и получать доступ к национальным символам? - PullRequest
2 голосов
/ 26 июля 2011

Полагаю, это очень распространенный вопрос, жаль, что я не могу найти ответ сам.

Моя база данных Oracle 10g Express: WE8MSWIN1252 кодировка

select * from nls_database_parameters where parameter='NLS_CHARACTERSET'

И когда я пытаюсь вставить / прочитать символы Юникода (тип .net String) через OraOLEDB.Oracle Провайдер, я получаю символы " ???? ".

Административный веб-инструмент Oracle отображает те же символы абракадабры «????».

Как я могу получить символы точно, я вставил?

Должен ли я изменить кодировку базы данных, поставщика OleDb, строку подключения или мне нужно каким-либо образом управлять параметрами вставки / выбора?

1 Ответ

2 голосов
/ 26 июля 2011

С вашими текущими настройками вы можете хранить только такие символы в «национальных» типах столбцов: NVARCHAR2, NCHAR, NCLOB ... См. Параметр NLS_NCHAR_CHARACTERSET для точной кодировки.В обычных типах столбцов (VARCHAR2, CHAR, CLOB ...) вы ограничены кодовой страницей Windows-1252.

Вы получаете знаки вопроса, потому что Oracle никогда не будет жаловаться на неправильные кодировки.Вместо этого он попытается преобразовать ваш ввод в целевую кодировку и, когда это невозможно, молча испортит ваши данные.

Другой вариант - установить Universal edition OracleXE (у вас есть западноевропейский).

Обновление: См. Также этот связанный вопрос: Разница между VARCHAR2 (10 CHAR) и NVARCHAR2 (10)

...