SQL. Co to jest collation ?
Jak ustawić rozpoznawanie dużych liter ?
SQL serwer domyślnie nie rozróżnia wielkich i małych liter w wyszukiwaniu lub filtrowaniu rekordów. Jednak podczas tworzenia bazy danych możemy ustawić właściwość zwaną collation.
W Object Explorer po wybraniu prawym przyciskiem myszy opcji New Database… otworzy się okno tworzenia bazy danych. Poza wieloma opcjami do wyboru mamy do wyboru zakładkę Options:
Po wybraniu tej opcji po prawej stronie jest pole Collation: i z pola kombi wybieramy odpowiednią dla naszego języka właściwość:
Właściwość ta jest bardzo ważna, gdyż określa obsługę języka, wrażliwość na wielkość znaków (case sensitive) ale także kolejność sortowania znaków w całej bazie danych. Od wersji SQL Server 2019 wprowadzono wsparcie dla kodowania UTF-8 w typach zwykłych (np. NCHAR) pod warunkiem jednak, że ustawienie collation kończy się na UTF8. Dla typów nchar i nvarchar (tych, które obsługują UNICODE) można ustawić na przykład taki collation: Polish_100_CS_AS_WS_SC_UTF8. (jest do wyboru z listy).Jeżeli w nazwie właściwości znajduje się akronim SC (supplementary characters) to typy będą używały kodowania UTF – 16 i będą obsługiwały pełny zakres znaków UNICODE.
Jak wspomniałem wcześniej ustawienie to służy również do sortowania rekordów. Aby sprawdzić obecne ustawienia tej właściwości możemy skorzystać z funkcji fn_helpcollation:
SELECT name, description FROM sys.fn_helpcollations();
W kolumnie descrription dla właściwości , o której mowa (Polish_100_CS_AS_KS_WS_SC_UTF8) znajdziemy opis szczegółowy:
Polish-100, case-sensitive, accent-sensitive, kanatype-sensitive, width-sensitive, supplementary characters, UTF8
Znaczenie ważniejszych skrótów:
CS – rozróżnia wielkie i małe litery. Małe litery są sortowane przed ich wielki wersjami.
AS – rozróżnia znaki z akcentem i bez akcentu (np. w hiszpańskim i francuskim)
KS- typy znaków japońskich (KANA)
W poleceniu SELECT możemy bezpośrednio określić sortowanie kolumny jako część tej definicji. Jeżeli w ustawieniach środowiska bazy danych brak ustawienia wielkości liter (_CS) zapytanie:
SELECT firstname, lastname FROM Employees WHERE
lastname = N’davis’;
zwróci wiersz dla pracownika o nazwisku „Davis”. Ale jeżeli w tym samym środowisku (bez ustawienia _CS) uruchomimy takie zapytanie:
SELECT firstname, lastname FROM Employees
WHERE lastname COLLATE Latin1_General_CS_AS = N’davis’;
nie dostaniemy żadnego rekordu, bo w bazie danych nie ma osoby o nazwisko „davis” pisanego małą literą.
Więcej informacji na szkoleniu : https://e-edumade.pl/szkolenie-sql-serwer-dla-zaawansowanych/