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

Definiowanie zestawu znaków dla kolumny Dla tabel bazy danych Oracle

Prosta odpowiedź brzmi, że w przeciwieństwie do MySQL, zestawy znaków nie mogą być definiowane w poziom kolumny (lub tabeli) . Latin1 nie jest również prawidłowym zestawem znaków Oracle.

Zestawy znaków są spójne w całej bazie danych i zostaną określone podczas tworzenia bazy danych. Możesz znaleźć swoją postać, wysyłając zapytanie NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

Pełna lista możliwych zestawów znaków jest dostępna dla 11g r2 i dla 9i lub możesz zapytać V$NLS_VALID_VALUES .

Możliwe jest użycie ZMIANA SESJI oświadczenie aby ustawić NLS_LANGUAGE lub NLS_TERRITORY , ale niestety nie możesz tego zrobić dla zestawu znaków. Uważam, że dzieje się tak, ponieważ zmiana języka zmienia sposób wyświetlania Oracle przechowywane dane, podczas gdy zmiana zestawu znaków zmieniłaby sposób, w jaki Oracle przechowuje dane.

Podczas wyświetlania danych możesz oczywiście określić wymagany zestaw znaków w dowolnym kliencie, którego używasz.

Migracja zestawu znaków nie jest trywialnym zadaniem i nie powinno być wykonywane lekko.

Na marginesie, dlaczego próbujesz używać Latin 1? Bardziej normalne byłoby utworzenie nowej bazy danych w formacie takim jak UTF-8 (inaczej znanym jako AL32UTF8 - nie używaj UTF8 ) lub UTF-16, aby efektywnie przechowywać dane wielobajtowe. Nawet jeśli nie potrzebujesz jej teraz, mądrze jest spróbować – bez żadnych gwarancji życiowych – zabezpieczyć swoją bazę danych w przyszłości bez konieczności migracji w przyszłości.

Jeśli chcesz określić różne zestawy znaków dla różnych kolumn w bazie danych, lepszym rozwiązaniem byłoby określenie, czy to wymaganie jest naprawdę konieczne i próba jego usunięcia. Jeśli jest to zdecydowanie konieczne, najlepszym rozwiązaniem może być użycie zestawu znaków, który jest nadzbiorem wszystkich potencjalnych zestawów znaków. Następnie przygotuj jakieś ograniczenie sprawdzające, które ogranicza kolumnę do określonych wartości szesnastkowych. W ogóle nie polecałbym tego robić, możliwość wkradnięcia się błędów jest ogromna i niezwykle złożona. Ponadto różne zestawy znaków w różny sposób renderują różne wartości szesnastkowe. To z kolei oznacza, że ​​musisz wymusić, aby kolumna była renderowana w określonym znaku, co jest niemożliwe, ponieważ wykracza poza zakres bazy danych.

1. Chciałbym poznać sytuację




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bool obsługuje Oracle SQL

  2. Procedura usuwania tylko wtedy, gdy baza danych jest wyższa niż sysdate

  3. Oracle:Usuń duplikaty w grupie z tabeli z dołączeniem

  4. Zawsze pokazywać miejsca dziesiętne w SQL?

  5. Jak wyrazić typ serializowalnego obiektu Blob w pliku mapowania hibernacji?