Oracle
 sql >> база данни >  >> RDS >> Oracle

разлика между NLS_NCHAR_CHARACTERSET и NLS_CHARACTERSET за Oracle

Като цяло всички ваши точки са верни. NLS_NCHAR_CHARACTERSET дефинира набора от знаци за NVARCHAR2 , et. ал. колони, докато NLS_CHARACTERSET се използва за VARCHAR2 .

Защо е възможно да виждате китайски знаци с US7ASCII ?

Причината е, че вашият набор от знаци в базата данни и вашия клиентски набор от знаци (т.е. вижте NLS_LANG стойност) и двете са US7ASCII . Вашата база данни използва US7ASCII и "мисли" също, че клиентът изпраща данни, използвайки US7ASCII . По този начин не прави никакво преобразуване на низовете, данните се прехвърлят бит по бит от клиент към сървър и обратно.

Поради този факт можете да използвате знаци, които всъщност не се поддържат от US7ASCII . Имайте предвид, че в случай, че вашият клиент използва различен набор от знаци (например, когато използвате ODP.NET Managed Driver в приложение за Windows), данните ще бъдат боклуци! Също така, ако обмислите миграция на набор от знаци в базата данни, имате същия проблем.

Друга забележка:не мисля, че бихте получили същото поведение с други набори от знаци, напр. ако и вашата база данни, и вашият клиент биха използвали WE8ISO8859P1 например. Също така имайте предвид, че всъщност имате грешна конфигурация. Вашата база данни използва набор от знаци US7ASCII , вашият NLS_LANG стойността също е US7ASCII (най-вероятно той изобщо не е зададен и Oracle го задава по подразбиране на US7ASCII ), но истинският набор от знаци на SQL*Plus, респ. вашият cmd.exe терминалът най-вероятно е CP950 или CP936.

Ако искате да настроите всичко правилно, можете или да зададете променливата на средата NLS_LANG=.ZHT16MSWIN950 (CP936 изглежда не се поддържа от Oracle) или променете кодовата си страница, преди да стартирате sqlplus.exe с команда chcp 437 . С тези правилни настройки няма да видите никакви китайски знаци, както вероятно бихте очаквали.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Методи за настройка на NLS параметри и техните приоритети (база данни на Oracle)

  2. SQLT и разделяне

  3. Грешка при присъединяване към актуализиране

  4. Условна клауза WHERE с израз CASE в Oracle

  5. Как да обновите материализиран изглед в oracle