Oracle
 sql >> Baza danych >  >> RDS >> Oracle

różnica między NLS_NCHAR_CHARACTERSET i NLS_CHARACTERSET dla Oracle

Ogólnie wszystkie twoje punkty są poprawne. NLS_NCHAR_CHARACTERSET definiuje zestaw znaków dla NVARCHAR2 , i in. glin. kolumny natomiast NLS_CHARACTERSET jest używany dla VARCHAR2 .

Dlaczego możliwe jest, że widzisz chińskie znaki z US7ASCII? ?

Powodem jest zestaw znaków bazy danych i zestaw znaków klienta (np. zobacz NLS_LANG wartość) to oba US7ASCII . Twoja baza danych używa US7ASCII i "myśli", że klient wysyła dane za pomocą US7ASCII . Dzięki temu nie dokonuje żadnej konwersji ciągów, dane są przesyłane bit po bicie od klienta do serwera i odwrotnie.

Dzięki temu możesz używać znaków, które w rzeczywistości nie są obsługiwane przez US7ASCII . Pamiętaj, że w przypadku, gdy twój klient używa innego zestawu znaków (np. gdy używasz zarządzanego sterownika ODP.NET w aplikacji Windows), dane będą śmieciami! Również jeśli rozważysz migrację zestawu znaków bazy danych, masz ten sam problem.

Kolejna uwaga:nie sądzę, że zachowałbyś to samo z innymi zestawami znaków, np. jeśli twoja baza danych i twój klient używaliby WE8ISO8859P1 na przykład. Należy również pamiętać, że faktycznie masz niewłaściwą konfigurację. Twoja baza danych używa zestawu znaków US7ASCII , Twój NLS_LANG wartość to także US7ASCII (najprawdopodobniej w ogóle nie jest ustawiony, a Oracle domyślnie ustawia go na US7ASCII ), ale prawdziwy zestaw znaków SQL*Plus, odp. Twój cmd.exe terminal to najprawdopodobniej CP950 lub CP936.

Jeśli chcesz ustawić wszystko poprawnie, możesz ustawić zmienną środowiskową NLS_LANG=.ZHT16MSWIN950 (CP936 wydaje się nie być obsługiwany przez Oracle) lub zmień stronę kodową przed uruchomieniem sqlplus.exe poleceniem chcp 437 . Przy tych prawidłowych ustawieniach nie zobaczysz żadnych chińskich znaków, jak prawdopodobnie byś się spodziewał.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określić, czy data Oracle jest w weekend?

  2. Jak tworzyć procedury składowane PL/SQL z parametrami w bazie danych Oracle

  3. Mentor Oracle DBA

  4. Wywołanie funkcji przechowywanej (która zwraca tablicę typu zdefiniowanego przez użytkownika) w Oracle poprzez łącze do bazy danych

  5. Jak zidentyfikować nieprawidłowe (uszkodzone) wartości przechowywane w kolumnach Oracle DATE?