| Termin | Definicja |
|---|---|
| Błąd kolacji | Błąd kolacji sygnalizuje niezgodność ustawień sortowania znaków pomiędzy porównywanymi elementami zapytania. Jak powstaje błąd kolacji podczas porównywania tekstuBłąd kolacji pojawia się wtedy, gdy baza danych próbuje porównać, połączyć albo uporządkować wartości tekstowe zapisane z użyciem niezgodnych reguł porównywania. Kolacja określa między innymi kolejność znaków, sposób traktowania wielkich i małych liter oraz znaczenie znaków diakrytycznych. Dwie kolumny mogą przechowywać tekst w tej samej stronie kodowej lub w tym samym kodowaniu znaków, a mimo to korzystać z różnych kolacji. Kodowanie opisuje sposób zapisania znaków, natomiast kolacja określa sposób ich interpretowania przy operacjach tekstowych. Różnica może wystąpić na przykład podczas porównania kolumny z nazwą użytkownika z tekstowym parametrem zapytania, połączenia tabel po polu tekstowym albo wykonania operacji łączącej wyniki kilku zapytań. Jedna wartość może używać reguł rozróżniających wielkość liter, a druga reguł uznających zapis „ABC” i „abc” za równoważny. Podobny problem dotyczy znaków diakrytycznych, takich jak „ą”, „ę”, „ł” czy „ś”. Silnik bazy musi wtedy ustalić, według których zasad ma wykonać porównanie; jeżeli nie może zrobić tego jednoznacznie, zgłasza błąd kolacji. Kolacja a kodowanie znaków w danychKolacja nie jest synonimem kodowania. Kodowanie, takie jak Unicode, określa zbiór dostępnych znaków i sposób ich reprezentacji w pamięci lub na dysku. Kolacja określa reguły sortowania i porównywania tekstu należącego do tego zbioru. Z tego powodu samo ustawienie jednolitego kodowania nie zawsze usuwa błąd. Dwie kolumny zapisane jako Unicode mogą nadal mieć różne reguły czułości na wielkość liter albo akcenty. Znaczenie kolacji widać w wynikach wyszukiwania i sortowania. Przy kolacji niewrażliwej na wielkość liter wyszukanie tekstu „Warszawa” może zwrócić również „warszawa”, natomiast kolacja wrażliwa na wielkość liter potraktuje te wartości jako różne. W zależności od wybranych reguł inaczej mogą być także porządkowane polskie znaki oraz znaki pochodzące z innych alfabetów. Zmiana kolacji może więc wpływać nie tylko na możliwość wykonania zapytania, ale również na liczbę zwróconych rekordów, kolejność wyników i działanie indeksów tekstowych. Miejsca występowania konfliktu w zapytaniu i strukturze bazyKonflikt kolacji często znajduje się pomiędzy dwiema kolumnami używanymi w warunku porównania. Dotyczy to zwłaszcza pól łączących tabele, takich jak identyfikator tekstowy, adres poczty elektronicznej, symbol produktu albo nazwa urządzenia. Problem może również wynikać z parametru przekazanego przez aplikację, stałej tekstowej zapisanej bez jawnego określenia reguł albo wyrażenia powstałego przez połączenie kilku fragmentów tekstu. W operacjach typu UNION lub w wyrażeniach warunkowych poszczególne gałęzie także mogą dostarczać tekst o różnych kolacjach. Diagnozę należy rozpocząć od ustalenia dokładnego zapytania, miejsca zgłoszenia wyjątku oraz definicji porównywanych pól. Trzeba sprawdzić kolację przypisaną do tabel, kolumn, parametrów i wyrażeń użytych w zapytaniu, a także przeanalizować niedawne zmiany schematu lub import danych. Doraźne wymuszenie jednej kolacji w pojedynczym porównaniu może usunąć komunikat, ale nie zawsze rozwiązuje problem projektowy. Jeżeli konflikt powtarza się w wielu zapytaniach, właściwsze jest ujednolicenie ustawień kolumn uczestniczących w tych samych relacjach oraz sprawdzenie, czy istniejące indeksy i warunki wyszukiwania nadal działają zgodnie z oczekiwaniami. Bezpieczne przywracanie spójnych reguł porównywaniaNaprawa powinna uwzględniać znaczenie danych, a nie polegać na przypadkowym wyborze pierwszej dostępnej kolacji. Najpierw należy ustalić, czy wyszukiwanie ma rozróżniać wielkość liter i znaki diakrytyczne, jakie języki obsługują dane oraz czy kolumny są używane w kluczach, relacjach i indeksach. Następnie można ujednolicić definicje odpowiednich pól albo jawnie zastosować zgodne reguły w konkretnym zapytaniu. Przed zmianą struktury warto wykonać kopię zapasową, przetestować zapytania na kopii danych i sprawdzić rekordy zawierające polskie lub inne znaki spoza podstawowego alfabetu łacińskiego. Jeżeli błąd występuje w aplikacji działającej na laptopie lub komputerze PC, przyczyną może być również niespójna konfiguracja połączenia z bazą, sterownika albo biblioteki używanej do przekazywania parametrów. Diagnostyka powinna obejmować pełny komunikat silnika, wersję używanego oprogramowania, definicję tabeli i zapytanie powodujące problem. Po korekcie trzeba przetestować porównania równościowe, sortowanie, wyszukiwanie bez względu na wielkość liter, łączenie tabel oraz import nowych danych. Dopiero zgodne wyniki tych testów potwierdzają, że błąd kolacji został usunięty, a nie tylko ukryty przez pojedynczą zmianę w zapytaniu. |