| Termin | Definicja |
|---|---|
| Konflikt kolacji | Konflikt kolacji to błąd wynikający z porównywania wartości tekstowych o różnych ustawieniach sortowania znaków. Na czym polega konflikt ustawień sortowaniaKonflikt kolacji, częściej określany angielskim terminem collation conflict, występuje wtedy, gdy baza danych musi porównać albo połączyć wartości tekstowe zapisane z użyciem różnych reguł sortowania. Kolacja definiuje sposób traktowania znaków podczas porównywania tekstu. Może określać między innymi kolejność liter, rozróżnianie wielkości znaków, rozróżnianie znaków diakrytycznych oraz zasady porównywania znaków należących do różnych alfabetów. Dwa pola przechowujące tekst mogą więc zawierać podobne dane, ale korzystać z odmiennych reguł interpretacji tych danych. Problem nie dotyczy samego wyglądu tekstu na ekranie. Wartości „Lodz” i „Łódź” mogą być wyświetlane prawidłowo, a mimo to wynik porównania zależy od kolacji przypisanej do kolumny, tabeli, bazy lub konkretnego wyrażenia. Również teksty zawierające wielkie i małe litery mogą być uznawane za równe w jednej kolacji, a za różne w innej. Konflikt pojawia się wtedy, gdy silnik bazy nie może samodzielnie wybrać jednej spójnej reguły dla operacji wykonywanej na obu wartościach. Operacje, które najczęściej ujawniają niezgodnośćKolacje są wykorzystywane podczas wielu typowych operacji na danych tekstowych. Błąd może pojawić się przy warunku porównania w klauzuli Źródłem rozbieżności może być również tabela tymczasowa, widok, procedura, plik importowany do bazy albo wartość tekstowa utworzona przez aplikację. Jeżeli struktura jednej tabeli została odziedziczona po starszej instalacji, a nowa tabela powstała z ustawieniami domyślnymi innej bazy, kolumny tekstowe mogą mieć różne kolacje mimo pozornie identycznego typu danych. Sam typ Jak rozpoznać przyczynę w przepływie danychDiagnostyka konfliktu kolacji powinna rozpocząć się od ustalenia, które dwa wyrażenia tekstowe są porównywane. Następnie trzeba sprawdzić ustawienia sortowania obu kolumn, ich typy danych oraz źródło wartości przekazywanych do zapytania. Ważne jest rozróżnienie między kolacją całej bazy a kolacją konkretnej kolumny, ponieważ ustawienie odziedziczone przez tabelę może różnić się od bieżącej konfiguracji bazy. Warto również przeanalizować definicje tabel, widoków i tabel tymczasowych, a nie tylko kod aplikacji wywołujący zapytanie. Objawem może być komunikat o niemożności rozwiązania konfliktu kolacji, ale nie zawsze błąd pojawia się natychmiast. Czasem zapytanie wykonuje się poprawnie, lecz zwraca inny zestaw wierszy niż oczekiwano, ponieważ jedna kolacja ignoruje wielkość liter, a druga ją rozróżnia. Podobne różnice mogą dotyczyć akcentów, znaków narodowych i kolejności sortowania. Dlatego przy analizie należy porównywać nie tylko treść rekordów, lecz także metadane kolumn, ustawienia połączenia oraz sposób konwersji danych podczas importu i zapisu. Ujednolicenie kolacji i zapobieganie powrotowi błęduNaprawa powinna polegać na świadomym ustaleniu jednej reguły porównywania dla danych, które mają być używane razem. Doraźnym rozwiązaniem może być jawne wskazanie kolacji w konkretnym wyrażeniu, jeżeli używany silnik bazy obsługuje takie wymuszenie. Takie podejście ogranicza zakres zmiany, ale powinno być stosowane konsekwentnie, ponieważ różne kolacje mogą prowadzić do odmiennych wyników wyszukiwania, sortowania i łączenia rekordów. Należy też sprawdzić, czy zastosowana konwersja nie wpływa na indeksy i wydajność zapytania. Trwalszym rozwiązaniem jest ujednolicenie definicji kolumn przechowujących dane porównywane między tabelami oraz ustalenie tej samej polityki dla nowych tabel, importów i migracji. Przed zmianą schematu trzeba przeanalizować istniejące rekordy, indeksy, klucze unikatowe i zapytania aplikacji, ponieważ zmiana zasad równości tekstów może ujawnić wcześniej ukryte duplikaty. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i podzespołów, a w przypadku problemów z oprogramowaniem może pomóc w uporządkowaniu objawów i ustaleniu dalszego kierunku diagnostyki. |