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

COLLATE clause

Termin Definicja
COLLATE clause

COLLATE clause to klauzula Transact-SQL określająca ustawienia sortowania znaków dla danej operacji lub kolumny.

Jak działa COLLATE clause w Transact-SQL

COLLATE clause w Transact-SQL służy do określania reguł porównywania i sortowania danych znakowych w SQL Server. Klauzula może wskazywać konkretne collation, czyli zestaw zasad opisujących między innymi alfabet, stronę kodową, wrażliwość na wielkość liter, wrażliwość na akcenty oraz sposób traktowania znaków japońskich, kana lub szerokości znaków, zależnie od wybranego wariantu. Collation wpływa na operacje wykonywane na typach char, varchar, nchar i nvarchar, a także na wyrażenia tekstowe używane w zapytaniach.

Najczęściej składnia ma postać wyrażenie COLLATE nazwa_collation. Przykładowo, SELECT * FROM dbo.Klienci WHERE Nazwisko COLLATE Polish_100_CI_AS = N'Zólć'; wymusza użycie wskazanego sposobu porównania dla kolumny w konkretnym warunku. W nazwie collation skróty takie jak CI i CS oznaczają odpowiednio niewrażliwość i wrażliwość na wielkość liter, natomiast AI i AS dotyczą niewrażliwości i wrażliwości na akcenty. Dokładne znaczenie zależy jednak od pełnej nazwy oraz wersji reguł sortowania.

Zakres zastosowania klauzuli przy kolumnach i zapytaniach

Collation może być ustalone na poziomie serwera, bazy danych, kolumny albo pojedynczego wyrażenia. Ustawienie odziedziczone z wyższego poziomu jest używane wtedy, gdy niższy poziom nie definiuje własnej wartości. Definicja kolumny może zawierać zapis taki jak nvarchar(100) COLLATE Polish_100_CI_AS, dzięki czemu dana kolumna ma określone reguły niezależnie od domyślnego collation bazy danych. Z kolei użycie klauzuli w zapytaniu pozwala zastosować reguły tylko podczas konkretnej operacji, bez zmieniania definicji tabeli.

COLLATE clause jest użyteczna przy porównywaniu tekstu pochodzącego z obiektów o różnych ustawieniach sortowania. SQL Server może w takiej sytuacji zgłosić konflikt collation, na przykład podczas operatora równości, złączenia JOIN albo operacji UNION. Jawne wskazanie collation na jednym z wyrażeń może usunąć niejednoznaczność. Przykład SELECT a.Nazwa FROM dbo.A a JOIN dbo.B b ON a.Nazwa COLLATE Polish_100_CI_AS = b.Nazwa; narzuca reguły porównania po stronie kolumny a.Nazwa. W praktyce warto ustalić, czy wybór collation odpowiada wymaganiom językowym i funkcjonalnym aplikacji.

Sortowanie, porównywanie i wpływ na wyniki zapytań

Collation nie jest wyłącznie ustawieniem kolejności znaków w klauzuli ORDER BY. Wpływa również na to, czy dwa ciągi znaków są uznawane za równe, jak działają operatory =, <>, LIKE i porównania zakresowe oraz jak zachowują się niektóre operacje grupowania. Przy collation niewrażliwym na wielkość liter wartości abc i ABC mogą być traktowane jako równe, natomiast przy wariancie wrażliwym na wielkość liter wynik może być inny. Analogicznie wariant akcentowy wpływa na porównania znaków takich jak a i ą.

Wybór collation może mieć także znaczenie dla indeksów i planu wykonania. Jeżeli kolumna jest objęta indeksem, a zapytanie nakłada na nią inną regułę przez COLLATE, SQL Server może nie wykorzystać indeksu w sposób tak korzystny jak przy porównaniu zgodnym z definicją kolumny. Nie jest to automatycznie błąd, ale przy dużych tabelach warto sprawdzić plan wykonania oraz czas zapytania. Szczególnej uwagi wymagają warunki łączenia tabel, porównania danych pochodzących z różnych baz oraz filtrowanie tekstu w aplikacjach obsługujących język polski. Sama zmiana collation w wyrażeniu nie konwertuje tekstu na inny typ danych i nie naprawia błędnie zapisanych znaków.

Bezpieczna weryfikacja ustawień COLLATE w SQL Server

Analizę warto rozpocząć od ustalenia collation używanego przez bazę i kolumny. Informację o collation bazy można odczytać zapytaniem SELECT DATABASEPROPERTYEX(DB_NAME(), 'Collation');, a właściwości kolumn są dostępne między innymi w widoku sys.columns oraz przez katalog systemowy opisujący typy danych. Listę collation obsługiwanych przez daną instancję można sprawdzić za pomocą funkcji fn_helpcollations(). Przy diagnozowaniu konfliktu należy porównać pełne nazwy ustawień, ponieważ pozornie podobne warianty mogą różnić się wersją reguł, stroną kodową albo wrażliwością na znaki.

Diagnostyka problemu powinna obejmować rzeczywiste zapytanie, definicje kolumn, typy tekstowe oraz sposób przekazywania parametrów przez aplikację. Doraźne dodanie COLLATE do warunku może usunąć błąd, ale trwała korekta wymaga oceny, czy zgodność ustawień nie powinna zostać zapewniona na poziomie schematu. W przypadku danych w języku polskim należy sprawdzić sortowanie i porównania na rzeczywistych przykładach zawierających znaki diakrytyczne, takie jak ą, ć, ę, ł, ń, ó, ś, ź i ż. Takie testy pozwalają odróżnić konflikt konfiguracji od problemu z kodowaniem, typem danych lub samą treścią przechowywanego tekstu.

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