| Termin | Definicja |
|---|---|
| Przekształcanie danych między kolacjami | Przekształcanie danych między kolacjami wymaga jawnej konwersji COLLATE, inaczej porównania mogą się nie powieść. Dlaczego kolacja wpływa na porównywanie danychKolacja określa sposób interpretowania tekstu przez silnik bazy danych. Obejmuje między innymi reguły sortowania znaków, porównywania wielkości liter, traktowania znaków diakrytycznych oraz sposób interpretacji określonego kodowania. Dwa pola przechowujące napisy mogą zawierać podobnie wyglądające wartości, ale podlegać innym regułom porównania. Różnica staje się istotna podczas używania operatorów równości, sortowania, grupowania, łączenia tabel oraz wyszukiwania tekstu. Problem pojawia się wtedy, gdy jedno wyrażenie tekstowe ma inną kolację niż drugie. Dotyczy to na przykład porównania kolumn pochodzących z tabel utworzonych w różnych momentach, zaimportowanych z różnych systemów albo skonfigurowanych przy użyciu odmiennych ustawień bazy. Silnik może zgłosić konflikt kolacji, ponieważ nie ma podstaw, aby samodzielnie wybrać reguły porównywania. W innych przypadkach automatycznie zastosowana konwersja może zmienić sposób wykorzystania indeksu lub wpłynąć na wynik sortowania. Jawne użycie COLLATE w wyrażeniuRozwiązaniem jest jawne wskazanie kolacji dla konkretnego wyrażenia za pomocą klauzuli COLLATE, o ile dany silnik bazy danych obsługuje tę składnię. Kolację można przypisać jednej stronie porównania, obu stronom albo wyrażeniu powstałemu po połączeniu kilku wartości. Celem jest doprowadzenie operandów do wspólnych reguł porównania przed wykonaniem operacji. Należy wybrać kolację zgodną z wymaganym językiem, czułością na wielkość liter i znakami diakrytycznymi, a nie tylko taką, która usuwa sam komunikat o konflikcie. Przy porównaniu tekstu istotne są różnice między kolacją czułą i niewrażliwą na wielkość liter oraz między kolacją czułą i niewrażliwą na akcenty. W zależności od ustawień wartości zawierające różną wielkość liter albo odmienne znaki diakrytyczne mogą zostać uznane za równe lub różne. Jawna konwersja nie zmienia automatycznie zawartości kolumny; zmienia reguły zastosowane do oceny danego wyrażenia. Jeżeli wymagane jest trwałe ujednolicenie danych, sama klauzula COLLATE nie zastępuje migracji schematu ani kontroli zapisujących wartości. Kolacje w łączeniach, filtrach i indeksachKonflikt kolacji często ujawnia się w warunku łączenia tabel, gdy identyfikator tekstowy w jednej tabeli został zdefiniowany inaczej niż odpowiadająca mu kolumna w drugiej. Analogiczna sytuacja może wystąpić w filtrze, podzapytaniu, wyrażeniu CASE, operacji UNION albo przy porównaniu kolumny z parametrem tekstowym. Ujednolicenie kolacji tylko w miejscu zapytania bywa właściwe jako rozwiązanie lokalne, szczególnie gdy różne reguły są potrzebne w odrębnych obszarach systemu. Trzeba jednak sprawdzić plan wykonania zapytania. Zastosowanie COLLATE bezpośrednio do kolumny może ograniczyć możliwość użycia indeksu, ponieważ silnik musi przekształcić wartości przed porównaniem. Skutkiem może być skanowanie większej liczby rekordów zamiast wyszukania po indeksie. Przy często wykonywanych zapytaniach warto rozważyć ujednolicenie kolacji kolumn w schemacie, zmianę definicji tabeli albo zastosowanie rozwiązania wspieranego przez konkretny silnik, na przykład odpowiedniej kolumny wyliczanej lub indeksu. Każdą zmianę należy poprzedzić kopią zapasową, testem na danych reprezentatywnych i sprawdzeniem wpływu na sortowanie oraz unikalność. Rozpoznawanie źródła konfliktu kolacjiDiagnostykę należy rozpocząć od ustalenia kolacji przypisanej do bazy, tabeli i poszczególnych kolumn tekstowych. Następnie trzeba porównać definicje kolumn używanych w warunku, typy danych oraz źródła parametrów przekazywanych przez aplikację. Warto sprawdzić także zapytania tworzone dynamicznie, procedury, widoki i instrukcje importu, ponieważ konflikt może być wprowadzany poza deklaracją głównej tabeli. Sam komunikat o niezgodności nie wskazuje jeszcze, która kolacja jest poprawna z punktu widzenia wymagań aplikacji. Podczas testu należy użyć wartości zawierających polskie znaki diakrytyczne, różną wielkość liter i znaki, które w wybranych regułach mogą być traktowane podobnie. Trzeba osobno zweryfikować wynik porównania, kolejność sortowania, działanie grupowania oraz zachowanie indeksu. Jeżeli dane są przenoszone między systemami, należy sprawdzić także kodowanie znaków i typ tekstowy, ponieważ konwersja kolacji nie naprawia utraty znaków wynikającej z nieprawidłowego kodowania. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i ich podzespołów, a przy problemach z oprogramowaniem bazodanowym na komputerze można rozpocząć od ustalenia, czy błąd wynika z konfiguracji aplikacji, definicji danych czy samego zapytania. |