Не удается ввести японские кандзи из окна IME в базу данных Oracle 12c sqlplus в Windows 10

мой столбец «идеограмма» имеет тип данных varchar2 (1000). Я вставил один символ в столбец с Microsoft IME, 寺, Oracle sqlplus просто выдает мне знак «?». Я проверил v $ nls_parameters. nls_characterset = AL32UTF8 nls_nchar_characterset = AL16UTF16

Теперь, исходя из того, что я прочитал в других вопросах здесь, если я использую тип данных varchar2, то на основе запроса v $ nls_parameters база данных использует AL32UTF8, но это "национальный набор символов", я думаю, я понятия не имею, что такое набор символов "базы данных".

Я также использовал функцию дампа с двойной таблицей. выберите дамп ('寺', 1016) из двойного; Я получил тип = 96 len = 1 набор символов = AL32UTF8: 3F

Я проделал то же самое в lifeql.oracle.com, который использует apex в облаке, и получил следующее: typ = 96 len = 3 characterset = AL32UTF8: e5, af, ba

почему шестнадцатеричные коды разные, если это один и тот же набор символов?

Понятия не имею, какую кодировку использует microsoft IME, возможно, в этом проблема.

Как я могу это исправить? Я могу создать другую базу данных, потому что у меня нет данных в той, в которой я это делаю, только для учебных целей. но я хочу посмотреть, смогу ли я исправить это, не делая этого.


person palmheights3    schedule 29.05.2020    source источник
comment
AL32UTF8 - это именование Unicode в Oracle. Чтобы настройки NLS работали для локальной базы данных, вы должны понимать настройку NLS_LANG (это настройка ОС, а не экземпляр Oracle или параметр сеанса): см. oracle.com/database/technologies/faq-nls-lang.html.   -  person pifor    schedule 29.05.2020
comment
Итак, вы говорите, что мне нужно перейти к настройкам Windows 10, найти этот параметр NLS_LANG и изменить набор символов Unicode на AL32UT8? таким образом Microsoft IME будет соответствовать оракулу?   -  person palmheights3    schedule 29.05.2020
comment
Да; вы должны проверить, какой у вас параметр NLS_LANG. Но правильные настройки зависят от региональных настроек Windows, от того, как ваше приложение работает с Oracle в отношении NLS. Также обратите внимание, что возможно, что правильный NLS_LANG может быть другим для SQLPlus в символьном режиме, для SQL Developer (инструмент Oracle - GUI в Java) или для IME вашего приложения. Набор символов AL32UTF8 может работать, или, может быть, вам следует выбрать тот, который соответствует вашим региональным настройкам Windows (японский? Китайский?).   -  person pifor    schedule 29.05.2020
comment
спасибо pifor, я изучу это.   -  person palmheights3    schedule 29.05.2020
comment
pifor, я прочитал эту ссылку, которую вы разместили, я изменил параметр nls_lang в реестре Windows, как они сказали, это был American_America.WE8MSWIN1252. Я просто изменил часть набора символов на American_America.JA16SJIS. Это не сработало.   -  person palmheights3    schedule 30.05.2020
comment
pifor, я прочитал эту ссылку, которую вы разместили, я изменил параметр nls_lang в реестре Windows, как они сказали, это был American_America.WE8MSWIN1252. Я просто изменил часть набора символов на American_America.JA16SJIS. Это не сработало. Затем я изменил его на Japanese_Japan.JA16SJIS, и это тоже не сработало. Я изменил код ACP с 1252 на 932, что соответствует JA16SJIS, но это для некоторого графического интерфейса sqlplus, который я не использую, я использую командную строку sqlplus, поэтому они говорят, измените OEM, я также изменил это на 932 , когда я набираю кандзи в sqlplus, он не работает.   -  person palmheights3    schedule 30.05.2020
comment
Извините, но я ничем не могу больше помочь.   -  person pifor    schedule 30.05.2020
comment
Я получил это сейчас, я забыл упомянуть, что я использовал sqlplus с powershell. Обычное приглашение в командной строке PowerShell c не было установлено на соответствующей кодовой странице. Я набрал chcp 65001, а затем смог набрать на японском языке. Хочу пожаловаться, что он ответил на вопрос, я пытаюсь понять, как это сделать. чем ты pifor.   -  person palmheights3    schedule 31.05.2020
comment
Рад, что со временем это сработало.   -  person pifor    schedule 01.06.2020


Ответы (1)


Общее решение - изучить параметр NLS_LANG в Oracle и понять, что у вас могут быть разные настройки NLS_LANG в Windows, потому что режим командной строки Windows не работает так же, как графический пользовательский интерфейс Windows, что касается настроек набора символов.

person pifor    schedule 01.06.2020