Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jeśli mamy zestaw znaków US7ASCII, dlaczego pozwala nam on przechowywać znaki spoza ASCII?

Działa, ponieważ oba warunki są spełnione:

  • Zestaw znaków klienta jest równy zestawowi znaków bazy danych.
  • Zestaw znaków pozwala na dowolne wartości bajtowe

Twój zestaw znaków bazy danych i zestaw znaków klienta są ustawione na US7ASCII . W takim przypadku każda z danych jest zapisywana/odczytywana jedna po drugiej bez jakiejkolwiek konwersji, tzn. wysyłane bajty są dokładnie zapisywane w bazie danych. Prawdopodobnie nie ustawiłeś NLS_LANG w ogóle po stronie klienta, ale Oracle domyślnie wybiera AMERICAN_AMERICA.US7ASCII .

US7ASCII to kodowanie 7-bitowe. Zakładam, że czysta aplikacja ASCII (która może być dość trudna do znalezienia) po prostu zignorowałaby ósmy bit, który jest przechowywany w architekturze 8-bitowej. Inne zestawy znaków, m.in. AL32UTF8 nie zezwalaj na każdą wartość bajtową. W takim przypadku takie znaki zostaną zastąpione przez symbol zastępczy, np. ¿ czy ? .

Pamiętaj, że ustawiłeś zestaw znaków klienta na US7ASCII co najprawdopodobniej nie jest poprawne. Ustaw go poprawnie na zestaw znaków używany przez twoją aplikację, a następnie ° zostanie zastąpiony.

W przypadku korzystania z SQL*Plus sprawdź stronę kodową konsoli poleceniem chcp ewent. locale charmap . Ustaw swój NLS_LANG odpowiednio zmienna środowiskowa przed uruchomieniem sqlplus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela utworzona w procedurze zostaje usunięta, pojawia się błąd kompilacji procedury

  2. Przekaż tablicę jako parametr wejściowy do procedury składowanej Oracle za pomocą prostego wywołania jdbc

  3. Pobierz typ tabeli Oracle z procedury składowanej za pomocą JDBC

  4. Jak uzyskać wartości parametrów wiązania z obiektu Oracle JDBC PreparedStatement?

  5. Zachowaj zamówienie z klauzuli „IN”