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

Prawdziwa długość ciągu, widziana przez Oracle

Można, jak pokazali inni, przekonwertować ciąg Java na tablicę bajtów przy użyciu zestawu znaków bazy danych Oracle, a następnie uzyskać z tego długość w bajtach. Polega to jednak na znajomości zestawu znaków twojej bazy danych — różne bazy danych będą miały różne zestawy znaków, co spowoduje różne długości bajtów dla tego samego łańcucha w różnych zestawach znaków.

Zakładając, że Twoja baza danych używa zestawu znaków o zmiennej szerokości, takiego jak UTF-8 (NLS_CHARACTERSET z AL32UTF8), można również deklarować kolumny w Oracle na podstawie długości znaków, a nie długości bajtów. To może uprościć twój kod, ponieważ możesz po prostu sprawdzić długość ciągu znaków. Upraszcza również komunikację dla użytkowników. Ogólnie użytkownikom trudno jest zrozumiećdlaczego pole może czasami przechowywać 5 znaków a innym razem odrzuca 2 znakowy ciąg w zależności od znaków wchodzących w jego skład (1 znak w zestawie znaków UTF-8 może wymagaćdo 3 bajtów pamięci).

Domyślnie, kiedy deklarujesz kolumnę

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

który mówi Oracle, aby zezwolić na maksymalnie 5 bajtów danych. Jeśli chcesz zezwolić na 5 znaków danych niezależnie od liczby bajtów, możesz użyć semantyki długości znaków

CREATE TABLE foo (
  col_name VARCHAR2(5 CHAR)
);

Zakładając, że chcesz to zrobić dla wszystkich tabel podczas uruchamiania DDL, możesz również ustawić nls_length_semantics na poziomie sesji przed uruchomieniem DDL

ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

tworzy tabelę z kolumną, która pozwala na do 5 znaków danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między TRUNCATE a DELETE?

  2. Oracle MERGE podnosi błąd ORA-00904

  3. Oracle — ORA-06502:PL/SQL:błąd liczbowy lub wartościowy (DBMS_OUTPUT)

  4. CURRENT_TIMESTAMP() Funkcja w Oracle

  5. Jak przyspieszyć ładowanie danych z Oracle sql do pandas df