sql >> Databasteknik >  >> RDS >> Oracle

Om vi ​​har US7ASCII-teckenuppsättning, varför låter den oss lagra icke-ASCII-tecken?

Det fungerar eftersom följande villkor båda är sanna:

  • Kundens teckenuppsättning är lika med din databasteckenuppsättning.
  • Teckenuppsättningen tillåter alla bytevärden

Din databasteckenuppsättning och din klientteckenuppsättning är inställda på US7ASCII . I sådana fall skrivs/läses varje data en efter en utan någon konvertering, dvs de bytes du skickar skrivs exakt till databasen. Du har förmodligen inte angett NLS_LANG överhuvudtaget på din klientsida men Oracle använder det som standard till AMERICAN_AMERICA.US7ASCII .

US7ASCII är en 7-bitars kodning. Jag antar att en ren ASCII-applikation (som kan vara ganska svår att hitta) bara skulle ignorera den 8:e biten som är lagrad i en 8-bitars arkitektur. Andra teckenuppsättningar, t.ex. AL32UTF8 tillåt inte varje bytevärde. I det här fallet kommer sådana tecken att ersättas av en platshållare, t.ex. ¿ eller ? .

Observera att du ställer in din klientteckenuppsättning till US7ASCII vilket med största sannolikhet inte är korrekt. Ställ in den korrekt till den teckenuppsättning som används av ditt program, sedan ° kommer att ersättas.

Om du använder SQL*Plus, kontrollera konsolens teckentabell med kommandot chcp , resp. locale charmap . Ställ in din NLS_LANG miljövariabeln innan du startar sqlplus.



  1. Hur visar man det totala antalet för den sista raden efter filstatus?

  2. SqlAlchemy:få id för den senaste posten infogat

  3. org.hibernate.MappingException:Ingen dialektmappning för JDBC-typ:1111

  4. JProgressBar uppdaterar inte, kan inte hitta en aning