sql >> Database teknologi >  >> RDS >> Oracle

forskel mellem NLS_NCHAR_CHARACTERSET og NLS_CHARACTERSET for Oracle

Generelt er alle dine pointer korrekte. NLS_NCHAR_CHARACTERSET definerer tegnsættet for NVARCHAR2 , et. al. kolonner, hvorimod NLS_CHARACTERSET bruges til VARCHAR2 .

Hvorfor er det muligt, at du ser kinesiske tegn med US7ASCII ?

Årsagen er, dit databasetegnsæt og dit klienttegnsæt (dvs. se NLS_LANG værdi) er begge US7ASCII . Din database bruger US7ASCII og den "tror" også at klienten sender data ved hjælp af US7ASCII . Den foretager således ingen konvertering af strengene, dataene overføres bit-for-bit fra klient til server og omvendt.

Derfor kan du bruge tegn, som faktisk ikke understøttes af US7ASCII . Vær opmærksom på, at hvis din klient bruger et andet tegnsæt (f.eks. når du bruger ODP.NET Managed Driver i en Windows-applikation), vil dataene være vrøvl! Også hvis du overvejer migrering af et databasetegnsæt, har du det samme problem.

En anden note:Jeg tror ikke, du ville få den samme adfærd med andre tegnsæt, f.eks. hvis din database og din klient begge ville bruge WE8ISO8859P1 for eksempel. Vær også opmærksom på, at du faktisk har forkert konfiguration. Din database bruger tegnsæt US7ASCII , din NLS_LANG værdien er også US7ASCII (mest sandsynligt er det slet ikke indstillet, og Oracle indstiller det som standard til US7ASCII ), men det rigtige tegnsæt af SQL*Plus, hhv. din cmd.exe terminal er højst sandsynligt CP950 eller CP936.

Hvis du kan lide at indstille alt korrekt, kan du enten indstille din miljøvariabel NLS_LANG=.ZHT16MSWIN950 (CP936 synes ikke at være understøttet af Oracle), eller skift din tegntabel, før du kører sqlplus.exe med kommandoen chcp 437 . Med disse korrekte indstillinger vil du ikke se nogen kinesiske tegn, som du sandsynligvis ville have forventet.




  1. Hvordan kan jeg afkorte en datetime i SQL Server?

  2. Planlagt kørsel af lagret procedure på SQL server

  3. Hvordan finder man de dårligst ydende forespørgsler i SQL Server 2008?

  4. Sådan rettes:JSON_VALUE Returnerer NULL med lange strenge (SQL-server)