Języki dostępne w SQL Server to zestaw wersji regionalnych wpływających na format dat i treść komunikatów systemowych.
Zakres ustawień językowych w SQL Server
Języki dostępne w SQL Server są zdefiniowanymi ustawieniami sesji, które wpływają przede wszystkim na interpretację wartości daty i czasu, pierwszy dzień tygodnia oraz język komunikatów zwracanych przez aparat bazodanowy. Nie jest to język programowania używany do pisania zapytań. Instrukcje T-SQL zachowują tę samą składnię niezależnie od wybranego języka, natomiast środowisko wykonania może inaczej odczytywać niejednoznaczne literały daty, takie jak 03/04/2024.
Lista konfiguracji językowych jest dostępna w widoku zgodnościowym sys.syslanguages. Znajdują się w nim między innymi nazwa języka, jego alias, identyfikator języka komunikatów, nazwy miesięcy, skróty nazw miesięcy, nazwy dni tygodnia, numer pierwszego dnia tygodnia oraz domyślny format daty. Współczesny kod aplikacji powinien traktować te ustawienia jako właściwość konkretnej sesji, a nie jako stałą obowiązującą identycznie dla wszystkich połączeń.
SET LANGUAGE a interpretacja dat i dni tygodnia
Instrukcja SET LANGUAGE zmienia język bieżącej sesji. Po jej wykonaniu SQL Server ustawia powiązane z tym językiem wartości domyślne, w tym format daty i pierwszy dzień tygodnia. Przykładowo sesja może zostać przełączona poleceniem SET LANGUAGE Polish;, o ile nazwa języka jest dostępna w danej instalacji. Zmiana dotyczy połączenia, w którym wykonano instrukcję; nie zmienia automatycznie konfiguracji innych użytkowników ani już zapisanych danych.
Format daty można dodatkowo zmienić niezależnie od języka za pomocą SET DATEFORMAT, używając wartości takich jak mdy, dmy lub ymd. Pierwszy dzień tygodnia ustala SET DATEFIRST. Te ustawienia mają znaczenie dla funkcji i wyrażeń zależnych od kolejności elementów daty lub numeracji dni tygodnia. W praktyce niejednoznaczne tekstowe reprezentacje dat powinny być zastępowane parametrami zapytań albo jednoznacznymi formatami obsługiwanymi przez SQL Server. Samo ustawienie języka nie konwertuje istniejących kolumn i nie zmienia typu danych.
Język logowania, sesji i komunikatów SQL Server
SQL Server może mieć określony domyślny język dla loginu. Jest on używany jako początkowa wartość językowa sesji, gdy nawiązywane jest połączenie, ale aplikacja może później wykonać własne instrukcje SET LANGUAGE lub SET DATEFORMAT. Warto rozróżniać język loginu od języka interfejsu narzędzia klienckiego. SSMS, sterownik lub aplikacja mogą prezentować część komunikatów według własnych ustawień, podczas gdy komunikat generowany przez silnik zależy od dostępnego identyfikatora języka w SQL Server.
Komunikaty systemowe są przechowywane w katalogu sys.messages. Dla jednego komunikatu mogą istnieć różne wersje językowe rozpoznawane przez language_id. Język sesji wpływa na wybór tekstu komunikatu, jeżeli odpowiednia wersja jest zainstalowana. Dotyczy to również mechanizmów, które odwołują się do numerów komunikatów, takich jak RAISERROR lub THROW używany wraz z wcześniej zdefiniowanym komunikatem. Własne komunikaty aplikacji nie stają się automatycznie wielojęzyczne; ich tłumaczenia i sposób wyboru trzeba zaprojektować oddzielnie.
Bezpieczne testowanie ustawień językowych w zapytaniach
Wpływ bieżącej konfiguracji można sprawdzić, odczytując wartości zwracane przez funkcje @@LANGUAGE, @@DATEFIRST i @@DATEFORMAT. Widok sys.syslanguages pozwala porównać aktywny język z jego domyślnym formatem daty, listą miesięcy i numerem pierwszego dnia tygodnia. Do analizy konkretnego połączenia warto rejestrować także ustawienia przekazywane przez sterownik, ponieważ dwa połączenia do tej samej bazy mogą mieć różne konfiguracje sesji.
Najczęstszy problem powstaje wtedy, gdy aplikacja przekazuje datę jako zwykły tekst bez określenia parametrów. Ten sam ciąg znaków może zostać odczytany inaczej po zmianie języka lub formatu daty sesji. Parametry zapytań przekazują wartość wraz z typem, dlatego ograniczają zależność od regionalnej interpretacji tekstu. Należy również pamiętać, że nazwy miesięcy i dni tygodnia używane w funkcjach formatowania lub prezentacji są zależne od ustawień językowych i nie powinny być traktowane jako stabilny klucz danych. Przy diagnostyce SQL Server sprawdza się więc zarówno konfigurację loginu, jak i ustawienia aktywnej sesji, sterownika oraz kodu wykonującego zapytanie.