sql >> Databáze >  >> RDS >> Oracle

Pokud máme sadu znaků US7ASCII, proč nám umožňuje ukládat znaky jiné než ASCII?

Funguje to, protože obě následující podmínky jsou pravdivé:

  • Znaková sada klienta se rovná znakové sadě vaší databáze.
  • Znaková sada povoluje libovolné bajtové hodnoty

Vaše znaková sada databáze a znaková sada klienta jsou nastaveny na US7ASCII . V takovém případě jsou všechna data zapisována/čtena jedno po druhém bez jakékoli konverze, tj. vámi zaslané bajty jsou přesně zapsány do databáze. Pravděpodobně jste nenastavili NLS_LANG vůbec na straně vašeho klienta, ale Oracle to nastaví na AMERICAN_AMERICA.US7ASCII .

US7ASCII je 7bitové kódování. Předpokládám, že čistá ASCII aplikace (kterou by mohlo být docela obtížné najít) by prostě ignorovala 8. bit, který je uložen v 8bitové architektuře. Další znakové sady, např. AL32UTF8 nepovolit každou hodnotu bajtu. V tomto případě budou takové znaky nahrazeny zástupným symbolem, např. ¿ nebo ? .

Poznámka:znakovou sadu klienta nastavíte na US7ASCII což s největší pravděpodobností není správné. Nastavte jej správně na znakovou sadu, kterou používá vaše aplikace, poté ° bude nahrazen.

V případě, že používáte SQL*Plus, zkontrolujte kódovou stránku konzoly příkazem chcp , resp. locale charmap . Nastavte NLS_LANG před spuštěním sqlplus.



  1. sql pro nalezení nejnovějšího záznamu ve skupině

  2. Může někdo podrobně vysvětlit funkci indexování Magentos?

  3. Přidání statické předpony na zvyšující se číslo

  4. Zkontrolujte, zda je objekt primárním klíčem pomocí OBJECTPROPERTY() na serveru SQL Server