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.fn_helpcollations

Termin Definicja
Widok sys.fn_helpcollations

sys.fn_helpcollations zwraca listę wszystkich kolacji obsługiwanych przez daną instancję SQL Server.

Do czego służy sys.fn_helpcollations

sys.fn_helpcollations jest funkcją systemową SQL Server zwracającą tabelaryczny wykaz kolacji obsługiwanych przez daną instancję silnika. Kolacja określa reguły porównywania i sortowania danych znakowych, a także sposób interpretowania wielkości liter, znaków diakrytycznych i, zależnie od konkretnej definicji, innych właściwości tekstu. Wynik funkcji zawiera dwie kolumny: name, przechowującą nazwę kolacji, oraz description, zawierającą jej opis.

Funkcję wywołuje się jako tabelaryczne źródło danych, na przykład w zapytaniu SELECT name, description FROM sys.fn_helpcollations();. Nie przyjmuje ona argumentów i nie służy do sprawdzania kolacji przypisanej do jednego konkretnego obiektu. Jej zadaniem jest przedstawienie katalogu nazw, które można wykorzystać między innymi w klauzuli COLLATE. Lista dotyczy możliwości konkretnej wersji i instalacji SQL Server, dlatego nie należy zakładać, że identyczny zestaw nazw występuje w każdym środowisku.

Jak czytać nazwy kolacji w SQL Server

Nazwa kolacji SQL Server opisuje zestaw reguł używanych podczas operacji na danych znakowych. Wśród nazw można spotkać kolacje oparte na regułach Windows, kolacje oznaczone jako SQL oraz nowsze warianty z dodatkowymi przyrostkami określającymi właściwości porównywania. Przykładowo oznaczenie _CI wskazuje porównywanie niewrażliwe na wielkość liter, czyli case-insensitive, natomiast _CS oznacza porównywanie wrażliwe na wielkość liter, czyli case-sensitive. Przyrostek _AI oznacza niewrażliwość na akcenty, a _AS ich rozróżnianie.

W nazwach kolacji można również znaleźć oznaczenia związane z kodowaniem i obsługą znaków dodatkowych. Przyrostek _SC informuje o obsłudze znaków uzupełniających w mechanizmach, które ją wspierają, a _UTF8 oznacza kolację używającą kodowania UTF-8 dla odpowiednich typów znakowych, takich jak varchar i char. Nie każda kolacja posiada wszystkie możliwe warianty. Sama nazwa nie powinna być interpretowana wyłącznie na podstawie fragmentu tekstu; pełne właściwości należy sprawdzić w dokumentacji używanej wersji SQL Server oraz w konfiguracji konkretnej bazy.

Istotne jest odróżnienie kolacji od typu danych. Kolacja wpływa na sposób porównywania i sortowania tekstu, ale nie zastępuje deklaracji varchar, nvarchar ani innych typów znakowych. Wybór kolacji może także wpływać na rozstrzyganie konfliktów podczas operacji łączących wartości tekstowe pochodzące z różnych źródeł. Funkcja sys.fn_helpcollations pomaga znaleźć poprawną nazwę kolacji, lecz sama nie zmienia ustawień serwera, bazy danych, kolumn ani zapytań.

Wykorzystanie funkcji przy projektowaniu zapytań

Wynik funkcji można filtrować i sortować tak samo jak dane zwracane przez inne tabelaryczne funkcje systemowe. Przykładowe zapytanie SELECT name, description FROM sys.fn_helpcollations() WHERE name LIKE N'%Polish%' ORDER BY name; pozwala ograniczyć listę do nazw zawierających określony fragment. Użycie literału Unicode z prefiksem N jest właściwe dla tekstu przeznaczonego do porównania z nazwami lub opisami zawierającymi znaki spoza podstawowego ASCII.

Znalezioną nazwę można zastosować jawnie w wyrażeniu, na przykład SELECT N'Łódź' COLLATE Polish_100_CI_AI;, o ile taka kolacja jest dostępna w danym środowisku. Klauzula COLLATE może zostać użyta przy wyrażeniu, kolumnie albo definicji obiektu, ale nie każda nazwa zwrócona przez funkcję będzie odpowiednia dla każdego celu. Przed zmianą kolacji trzeba uwzględnić typ danych, indeksy, klucze i sposób, w jaki aplikacja oczekuje sortowania oraz porównywania wartości.

Funkcja jest szczególnie przydatna podczas przenoszenia zapytań między instancjami, sprawdzania dostępności konkretnej kolacji oraz przygotowywania skryptów instalacyjnych. Nie jest jednak zamiennikiem dla poleceń diagnostycznych pokazujących bieżące ustawienia. Kolację instancji można odczytać za pomocą właściwości serwera, a kolację bieżącej bazy danych za pomocą właściwości bazy. Dla kolumn należy sprawdzić definicję tabeli lub metadane kolumn. Dopiero zestawienie bieżącej konfiguracji z katalogiem zwróconym przez sys.fn_helpcollations() pozwala ocenić, czy planowana kolacja jest dostępna i gdzie faktycznie występuje różnica.

Znaczenie wyniku dla diagnostyki SQL Server

Nieprawidłowe założenia dotyczące kolacji mogą powodować różnice w wynikach sortowania, filtrów i porównań tekstowych. Wrażliwość na wielkość liter może sprawić, że wartości różniące się wyłącznie zapisem liter będą traktowane jako równe albo różne. Analogicznie ustawienie dotyczące akcentów może zmienić wynik porównania znaków takich jak „a” i „ą”. Różnice stają się widoczne także przy łączeniu tabel, tworzeniu indeksów oraz wykonywaniu operacji wymagających zgodności kolacji pomiędzy wyrażeniami.

W przypadku komunikatu o konflikcie kolacji należy najpierw ustalić, jakie kolacje mają baza danych, poszczególne kolumny i użyte wyrażenia. Następnie można sprawdzić w sys.fn_helpcollations(), czy potrzebna definicja jest dostępna. Doraźne użycie COLLATE w zapytaniu może rozwiązać konflikt dla konkretnej operacji, ale trwała zmiana kolacji kolumny lub bazy wymaga analizy zależności. Dotyczy to między innymi indeksów, ograniczeń, kluczy, procedur, widoków i kodu aplikacji, który może polegać na określonym porządku sortowania.

Podczas diagnostyki należy również rozróżnić nazwę kolacji od wersji reguł sortowania i od sposobu przechowywania znaków. Kolacja wybrana z listy funkcji nie gwarantuje sama w sobie poprawnego działania aplikacji, jeśli dane zostały zapisane w nieodpowiednim typie lub jeśli zapytanie miesza wartości o różnych właściwościach. Przy pracy z SQL Server warto zachować wynik zapytania diagnostycznego, zapisać dokładną nazwę kolacji i wykonać testy na reprezentatywnych danych. Taka procedura pozwala odtworzyć zachowanie środowiska oraz ograniczyć ryzyko niezamierzonej zmiany wyników zapytań podczas konfiguracji lub migracji instancji.

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