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

Kodowanie zestawu znaków i współczynniki rozmiaru pamięci

Jeśli nie interesuje Cię tylko maksymalna zmiana, Twój przykład nie jest poprawny.

AL32UTF8 to zestaw znaków o zmiennej długości. Mówiąc ogólnie, każdy znak z zestawu znaków US7ASCII zajmuje 1 bajt, znaki europejskie zazwyczaj wymagają 2 bajtów, różne znaki języka azjatyckiego wymagają 3 bajtów, a kilka bardzo rzadkich znaków wymaga 4 bajtów. Realistycznie rzecz biorąc, jeśli mówisz o konwersji rzeczywistych danych WE8ISO8859P1 na AL32UTF8, w praktyce zobaczysz współczynnik konwersji między 1 a 2, który jest znacznie bliższy 1 niż 2. Bez wyszukiwania mapowania Unicode dla każdego prawidłowego znaku WE8ISO8859P1 , byłbym zaskoczony, gdyby w zestawie znaków AL32UTF8 wymagane były 3 lub 4 bajty pamięci.

W Przewodniku wsparcia globalizacji znajduje się sekcja dotycząca zestawy znaków to mówi, które zestawy znaków są jednobajtowe, które są wielobajtowe, a które wielobajtowe mają stałą szerokość. Prawie wszystkie wielobajtowe zestawy znaków mają zmienną szerokość, więc czynnik, którego szukasz, będzie zależał od Twoich danych.

W większości przypadków lepiej jest zadeklarować, że kolumny będą używać semantyki długości znakowej, a nie semantyki długości bajtowej, pozwalając bazie danych zorientować się za kulisami, ile danych ma zaalokować. Na przykład, jeśli zadeklarujesz kolumnę

CREATE TABLE foo (
  col1 VARCHAR2(10 CHAR)
)

Oracle przydzieli miejsce na 10 znaków pamięci niezależnie od zestawu znaków bazy danych i bez względu na rzeczywistą liczbę bajtów wymaganych do przechowywania tych danych (z zastrzeżeniem limitu 4000 bajtów na VARCHAR2 kolumna). To generalnie znacznie ułatwia definiowanie rozmiarów kolumn ponieważ nie musisz przewymiarowywaćkolumn w przypadku gdy ktoś zdecyduje się wrzucić 10 4-bajtowych znaków UTF-8 do jednego wiersza i nie musisz wyjaśniaćużytkownikomże kolumna zaakceptuje ciągi o różnej liczbie znaków w zależności od wybranego języka i/lub określonych znaków.

Chociaż ludzie z Oracle, którzy regularnie zajmują się globalizacją, odradzają to , preferując jawne określenie semantyki długości znaków podczas deklarowania kolumn lub przynajmniej ustawianie jej tylko na poziomie sesji, możesz ustawić NLS_LENGTH_SEMANTICS parametr inicjalizacji spowodować VARCHAR2(10) aby domyślnie używać semantyki długości znaków zamiast semantyki długości bajtów (nadal możesz określić VARCHAR2(10 BYTE) jeśli chcesz semantyki długości bajtów).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SET NULL:Określ ciąg do zwrócenia za każdym razem, gdy wystąpi wartość Null w SQLcl / SQL * Plus

  2. zagnieżdżone wybierz lub dołącz do zapytania?

  3. Oracle :YEAR Słowo kluczowe niepoprawne

  4. Sprawdzanie składni SQL online zgodne z wieloma bazami danych

  5. Czy jeden schemat może mieć wielu użytkowników?