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

Hvis vi har US7ASCII-tegnsæt, hvorfor lader det os gemme ikke-ASCII-tegn?

Det virker, fordi følgende betingelser begge er sande:

  • Klienttegnsæt er lig med dit databasetegnsæt.
  • Tegnsættet tillader enhver byteværdi

Dit databasetegnsæt og dit klienttegnsæt er indstillet til US7ASCII . I så fald skrives/læses hver data én efter én uden nogen konvertering, dvs. de bytes, du sender, skrives nøjagtigt til databasen. Du har sandsynligvis ikke indstillet NLS_LANG overhovedet på din klientside, men Oracle indstiller det som standard til AMERICAN_AMERICA.US7ASCII .

US7ASCII er en 7-bit-kodning. Jeg antager, at en ren ASCII-applikation (som kunne være ret svær at finde) bare vil ignorere den 8. bit, som er gemt i en 8-bit arkitektur. Andre tegnsæt, f.eks. AL32UTF8 tillad ikke hver byteværdi. I dette tilfælde vil sådanne tegn blive erstattet af en pladsholder, f.eks. ¿ eller ? .

Bemærk, du indstiller dit klienttegnsæt til US7ASCII hvilket højst sandsynligt ikke er korrekt. Indstil det korrekt til det tegnsæt, der bruges af din applikation, og derefter ° vil blive erstattet.

Hvis du bruger SQL*Plus, skal du kontrollere konsollens tegntabel med kommandoen chcp , hhv. locale charmap . Indstil din NLS_LANG miljøvariabel i overensstemmelse hermed, før du starter sqlplus.



  1. hvordan man bruger zend paginate uden at indlæse alle resultaterne af en database

  2. PL/SQL-funktionen i Oracle kan ikke se DBMS_AQ

  3. Array datatype, opdelt streng,

  4. MySQL FEJL 1005 (HY000):Kan ikke oprette tabellen 'foo.#sql-12c_4' (fejlnr.:150)