Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Widok sys.databases (collation_name)

Termin Definicja
Widok sys.databases (collation_name)

Kolumna collation_name w sys.databases wskazuje domyślną kolację przypisaną do danej bazy.

Widok sys.databases i znaczenie collation_name

Widok sys.databases jest jednym z podstawowych katalogów systemowych używanych do odczytywania informacji o bazach danych w Microsoft SQL Server. Każdy wiersz tego widoku opisuje jedną bazę dostępną w danej instancji, a poszczególne kolumny pokazują między innymi nazwę, stan, model odzyskiwania, poziom zgodności, ustawienia bezpieczeństwa oraz właściwości związane z przetwarzaniem tekstu. Kolumna collation_name zawiera nazwę domyślnej kolacji przypisanej do bazy danych.

Kolacja określa zasady porównywania i sortowania danych znakowych. W praktyce wpływa na to, czy wielkość liter jest rozróżniana, czy znaki akcentowane są traktowane jako równoważne, jak porządkowane są litery oraz w jaki sposób interpretowane są niektóre znaki językowe. Odczytanie wartości przez zapytanie SELECT name, collation_name FROM sys.databases; pozwala szybko sprawdzić ustawienie dla wszystkich baz widocznych w katalogu. Dla jednej wybranej bazy można zastosować filtr po kolumnie name, na przykład WHERE name = N'NazwaBazy'.

Wartość zwrócona w collation_name jest nazwą konkretnej definicji, na przykład kolacji opartej na regułach języka polskiego, angielskiego albo na regułach ogólnych. Sama nazwa może również wskazywać rodzinę reguł, wersję sortowania oraz dodatkowe cechy. Końcówki takie jak CI i CS odnoszą się odpowiednio do nieuwzględniania albo uwzględniania wielkości liter, natomiast AI i AS opisują nieuwzględnianie albo uwzględnianie akcentów. W nowszych środowiskach spotyka się również oznaczenia związane z UTF-8 lub UTF-16, zależnie od sposobu przechowywania znaków.

Widok sys.databases collation_name na tle innych poziomów kolacji

Interpretacja collation_name wymaga rozróżnienia kilku poziomów konfiguracji. SQL Server może posiadać kolację instancji, baza danych może mieć własną kolację domyślną, poszczególne kolumny tekstowe mogą mieć ustawienie odmienne od ustawienia bazy, a wyrażenia w zapytaniu mogą zostać tymczasowo przekształcone za pomocą klauzuli COLLATE. Dlatego wartość widoczna w sys.databases nie zawsze opisuje każdy tekst przechowywany w tej bazie.

Kolacja bazy jest ustawieniem domyślnym stosowanym podczas tworzenia nowych obiektów, o ile nie określono innej wartości. Dotyczy to między innymi kolumn typów char, varchar, nchar i nvarchar. Jeżeli tabela zawiera kolumnę tekstową utworzoną z własną kolacją, jej zachowanie może różnić się od wartości zapisanej w sys.databases. To samo dotyczy baz przeniesionych z innego środowiska, odtworzonych z kopii zapasowej albo utworzonych przez skrypt zawierający jawne deklaracje kolacji.

Różnica między kolacją bazy a kolacją kolumny może ujawnić się podczas porównywania dwóch pól tekstowych. Jeżeli oba operandy mają niezgodne ustawienia, SQL Server może zgłosić konflikt kolacji i zażądać jednoznacznego wskazania reguł porównania. Doraźnym rozwiązaniem bywa użycie COLLATE przy jednym z operandów, lecz trwałe usunięcie problemu wymaga ustalenia, które reguły powinny obowiązywać w modelu danych. Należy przy tym uwzględnić sortowanie, indeksy, wyszukiwanie, importy oraz wymagania językowe użytkowników.

Kolacja nie jest tym samym co kodowanie znaków. Kodowanie opisuje sposób reprezentacji znaków, natomiast kolacja określa sposób ich porównywania i porządkowania. Wartość collation_name może wskazywać wariant obsługujący UTF-8, ale sama obecność takiego oznaczenia nie oznacza automatycznej zmiany wszystkich istniejących kolumn. Rodzaj danych, definicja kolumny i sposób zapisu wartości nadal mają znaczenie.

Widok sys.databases collation_name a typowe problemy z tekstem

Jednym z częstszych problemów jest pozornie nieprawidłowe sortowanie polskich znaków. Przyczyną może być kolacja nieuwzględniająca reguł właściwych dla danego języka, kolumna odziedziczona z innego schematu albo sortowanie narzucone bezpośrednio w zapytaniu. Wartość w sys.databases pomaga ustalić ustawienie domyślne, ale nie zastępuje sprawdzenia definicji konkretnych kolumn. Do analizy można wykorzystać widoki katalogowe, takie jak sys.columns oraz sys.types, a następnie porównać uzyskane informacje z wynikiem dla bazy.

Inny problem dotyczy wyszukiwania bez rozróżniania wielkości liter. W bazie z kolacją typu CI wartości ABC i abc mogą być uznane za równoważne podczas porównania. Przy wariancie CS mogą zostać potraktowane jako różne. Podobna zasada odnosi się do akcentów. W ustawieniu AI znaki z akcentami mogą być porównywane tak samo jak ich odpowiedniki bez akcentów, natomiast wariant AS zachowuje rozróżnienie. Znaczenie takiej różnicy jest szczególnie istotne dla loginów aplikacyjnych, kodów, identyfikatorów, wyszukiwarek oraz danych osobowych.

Nieprawidłowo dobrana kolacja może też wpływać na unikalność indeksów. Jeżeli kolumna posiada ograniczenie unikalności, dwa napisy różniące się wyłącznie wielkością liter albo akcentem mogą zostać potraktowane jako duplikaty. Zmiana kolacji po utworzeniu tabeli wymaga zatem sprawdzenia indeksów, kluczy, ograniczeń, widoków, procedur oraz procesów importu. W niektórych przypadkach konieczne jest czasowe usunięcie zależności, przebudowanie indeksów lub przygotowanie migracji z kontrolą wartości konfliktowych.

Trudności pojawiają się również przy łączeniu tabel pochodzących z różnych baz. Zapytanie może działać poprawnie dla jednej konfiguracji, a po przeniesieniu do innego środowiska zwrócić błąd konfliktu kolacji. Szczególną uwagę należy zwrócić na tabele tymczasowe, ponieważ ich kolumny tekstowe często dziedziczą ustawienia z bazy tempdb, a nie z bazy użytkownika. W takiej sytuacji bezpieczniej jest jawnie określić kolację dla kolumny tymczasowej albo ujednolicić sposób budowania obiektów pomocniczych.

Widok sys.databases collation_name w codziennej diagnostyce

Sprawdzanie kolacji warto rozpocząć od prostego zestawienia nazw baz i ich ustawień. Przydatne jest również porównanie wyniku z informacją o kolacji instancji oraz z konfiguracją tempdb. Następnie można przeanalizować kolumny tekstowe w tabelach, szczególnie te, które uczestniczą w relacjach, indeksach i warunkach wyszukiwania. Takie podejście pozwala odróżnić problem globalny od sytuacji ograniczonej do pojedynczego obiektu.

W dokumentacji technicznej należy zapisać pełną nazwę kolacji, ponieważ skrócona informacja typu „sortowanie polskie” jest zbyt ogólna. Znaczenie mają między innymi czułość na wielkość liter, czułość na akcenty, sposób traktowania znaków dodatkowych, wersja reguł oraz obsługa UTF-8. Przy porównywaniu dwóch środowisk należy sprawdzać dokładne nazwy, a nie tylko ich początkowe fragmenty.

Przy planowaniu zmiany kolacji nie powinno się ograniczać do pojedynczego polecenia. Należy wykonać kopię zapasową, zinwentaryzować zależności i ustalić okno na testy. Warto przygotować próbki zawierające małe i wielkie litery, polskie znaki, znaki z akcentami, cyfry oraz wartości podobne wizualnie. Trzeba również sprawdzić działanie sortowania, filtrów, wyszukiwania częściowego, indeksów, raportów i importów. Dopiero wynik takiej próby pozwala ocenić, czy wybrana kolacja odpowiada rzeczywistym wymaganiom.

W zapytaniach diagnostycznych można połączyć informacje z sys.databases z metadanymi tabel i kolumn. Ułatwia to odnalezienie obiektów, których ustawienia odbiegają od kolacji bazy. Warto pamiętać, że kolumna o typie nchar lub nvarchar nadal może mieć własną kolację, mimo że przechowuje dane Unicode. Unicode rozszerza zakres obsługiwanych znaków, ale nie usuwa zasad dotyczących sortowania i porównywania.

Kiedy sprawdzić Widok sys.databases collation_name w serwisie komputerowym

Analizę wartości collation_name warto zlecić lub rozpocząć wtedy, gdy występują błędy przy łączeniu tabel, różnice w wynikach wyszukiwania, nieoczekiwane duplikaty, problemy z polskimi znakami albo rozbieżności po migracji bazy. Dotyczy to także sytuacji, w której aplikacja działa poprawnie na jednym komputerze, lecz po przeniesieniu danych do innego środowiska zaczyna zwracać odmienne rezultaty. Przed zmianą ustawień należy zabezpieczyć dane i ustalić, czy problem dotyczy bazy, kolumny, zapytania, sterownika czy warstwy aplikacji.

W ramach porządkowania środowiska można przygotować raport obejmujący nazwę bazy, wartość collation_name, kolacje kolumn tekstowych, używane indeksy oraz miejsca, w których zastosowano COLLATE. Taki raport ułatwia ocenę ryzyka i ogranicza przypadkowe zmiany. W Warszawie pomoc techniczną w diagnostyce sprzętu i środowiska komputerowego świadczy Warszawskie Pogotowie Komputerowe 24/7, a naprawy są z reguły realizowane do 3 dni roboczych.

Przy zgłoszeniu problemu warto przekazać komunikat błędu, fragment zapytania, nazwę bazy, wynik odczytu z sys.databases oraz informację, kiedy problem się pojawił. Przydatne są także dane o ostatniej migracji, zmianie aplikacji lub odtworzeniu kopii zapasowej. Nie zaleca się samodzielnego zmieniania kolacji na działającej bazie bez sprawdzenia zależności, ponieważ skutkiem może być zmiana wyników porównań, niezgodność indeksów lub konieczność ponownego utworzenia części obiektów.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę