sql >> Database >  >> RDS >> Oracle

Als we een US7ASCII-tekenset hebben, waarom kunnen we dan niet-ascii-tekens opslaan?

Het werkt omdat de volgende voorwaarden beide waar zijn:

  • Client-tekenset is gelijk aan uw database-tekenset.
  • De tekenset staat alle bytewaarden toe

Uw database-tekenset en uw client-tekenset zijn ingesteld op US7ASCII . In dat geval worden alle gegevens één voor één geschreven/gelezen zonder enige conversie, d.w.z. de bytes die u verzendt, worden exact naar de database geschreven. Waarschijnlijk heb je NLS_LANG niet ingesteld helemaal niet aan uw clientzijde, maar Oracle stelt het standaard in op AMERICAN_AMERICA.US7ASCII .

US7ASCII is een 7-bits codering. Ik neem aan dat een pure ASCII-toepassing (die vrij moeilijk te vinden zou kunnen zijn) gewoon de 8e bit negeert die is opgeslagen in een 8-bits architectuur. Andere tekensets, b.v. AL32UTF8 niet elke bytewaarde toestaan. In dit geval zullen dergelijke tekens worden vervangen door een tijdelijke aanduiding, b.v. ¿ of ? .

Let op, u stelt uw client-tekenset in op US7ASCII wat hoogstwaarschijnlijk niet klopt. Stel het correct in op de tekenset die wordt gebruikt door uw toepassing, dan ° wordt vervangen.

Als u SQL*Plus gebruikt, controleer dan de consolecodepagina met het commando chcp , resp. locale charmap . Stel uw NLS_LANG in omgevingsvariabele dienovereenkomstig voordat u sqlplus start.



  1. Waarom MySQL de VIEW-querytekst volledig opnieuw formatteren?

  2. mysql :Toon geen dubbel resultaat op SELECT

  3. Mariadb sql-bestand naar mysql

  4. Hoe toekomstige(!) datums in een database op te slaan