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

Różnica między NVARCHAR w Oracle i SQL Server?

Tak, jeśli baza danych Oracle jest tworzona przy użyciu zestawu znaków Unicode, NVARCHAR w SQL Server należy przenieść do VARCHAR2 w Oracle. W Oracle NVARCHAR typ danych istnieje, aby umożliwić aplikacjom przechowywanie danych przy użyciu zestawu znaków Unicode, gdy zestaw znaków bazy danych nie obsługuje Unicode.

Jedną z rzeczy, o których należy pamiętać podczas migracji, jest semantyka długości znaków. W SQL Server NVARCHAR(20) przydziela miejsce na 20 znaków, co wymaga do 40 bajtów w UCS-2. W Oracle domyślnie VARCHAR2(20) przydziela 20 bajtów pamięci. W AL32UTF8 zestaw znaków, czyli potencjalnie wystarczy miejsca tylko na 6 znaków, chociaż najprawdopodobniej obsłuży znacznie więcej (pojedynczy znak w AL32UTF8 wymaga od 1 do 3 bajtów. Prawdopodobnie chcesz zadeklarować swoje typy Oracle jako VARCHAR2(20 CHAR) co oznacza, że ​​chcesz przydzielić miejsce na 20 znaków, niezależnie od liczby wymaganych bajtów. To wydaje się być znacznie łatwiejsze do zakomunikowania niż próba wyjaśnienia, dlaczego niektóre 20-znakowe ciągi są dozwolone, podczas gdy inne 10-znakowe ciągi są odrzucane.

Możesz zmienić domyślną semantykę długości na poziomie sesji, tak aby wszystkie tabele, które tworzysz bez określania semantyki długości, używały semantyki znakowej, a nie bajtowej

ALTER SESSION SET nls_length_semantics=CHAR;

Pozwala to uniknąć wpisywania CHAR za każdym razem, gdy definiujesz nową kolumnę. Możliwe jest również ustawienie tego na poziomie systemu, ale jest to odradzane przez zespół NLS — najwyraźniej nie wszystkie skrypty dostarczane przez Oracle zostały dokładnie przetestowane w bazach danych, w których NLS_LENGTH_SEMANTICS został zmieniony. I prawdopodobnie bardzo niewiele skryptów innych firm zostało.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy strefa czasowa java.sql.Timestamp jest specyficzna?

  2. Oracle DB i SQL Developer:Raport o błędzie:wykonanie zakończone z ostrzeżeniem — Jak *zobaczyć* ostrzeżenie?

  3. Jeśli oświadczenie w klauzuli Where

  4. Czy powinienem używać JDBC getNString() zamiast getString()?

  5. Jak stworzyć użytkownika w Oracle SQL developer