Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

CHAR/VARCHAR a kolacja

Termin Definicja
CHAR/VARCHAR a kolacja

CHAR/VARCHAR a kolacja to zależność między wybranym typem danych tekstowych a ustawieniami sortowania znaków w bazie.

CHAR i VARCHAR jako dwa sposoby przechowywania tekstu

CHAR oraz VARCHAR oznaczają typy danych przeznaczone do przechowywania ciągów znaków, ale różnią się sposobem określania długości wartości. CHAR jest typem o długości stałej: kolumna CHAR(10) opisuje miejsce przeznaczone na tekst o długości 10 znaków. Jeżeli zapisana wartość jest krótsza, silnik bazy danych może uzupełniać ją do zadeklarowanej długości albo usuwać takie uzupełnienie przy odczycie, zależnie od reguł konkretnego systemu. VARCHAR jest typem o długości zmiennej. Deklaracja VARCHAR(10) wyznacza maksymalną długość wartości, lecz tekst krótszy zajmuje przestrzeń odpowiadającą rzeczywistej wartości oraz metadanym potrzebnym do jej obsługi.

Warto pamiętać, że zapis CHAR(10) i VARCHAR(10) nie zawsze oznacza dokładnie 10 bajtów. W bazie używającej kodowania wielobajtowego jeden znak może zajmować więcej niż jeden bajt, a limit może być określany w znakach albo w bajtach, zależnie od produktu i jego konfiguracji. Dlatego przed wyborem typu trzeba sprawdzić dokumentację używanego silnika, sposób liczenia długości oraz dozwolone kodowanie. CHAR bywa przydatny przy wartościach o rzeczywiście stałym rozmiarze, natomiast VARCHAR zwykle lepiej pasuje do nazw, opisów, adresów i innych tekstów o zmiennej długości.

Kolacja decyduje o porównywaniu znaków

Kolacja, określana w dokumentacji baz danych także jako collation, jest zestawem reguł używanych do porównywania i porządkowania tekstu. Może określać kolejność znaków oraz sposób traktowania wielkości liter, znaków diakrytycznych i elementów zależnych od języka. W jednej kolacji teksty „A” i „a” mogą być uznawane za równoważne podczas porównania, a w innej mogą być rozróżniane. Analogicznie „ą” może być traktowane jako odrębny znak albo jako wariant „a”, zależnie od przyjętych reguł.

Kolacja wpływa między innymi na operator równości, sortowanie wyników, operatory wyszukiwania tekstowego oraz działanie indeksów opartych na kolumnach znakowych. Jeżeli aplikacja wykonuje wyszukiwanie wartości zapisanej w VARCHAR, wynik zależy nie tylko od samych znaków w kolumnie, lecz także od reguł porównania przypisanych do kolumny, tabeli, bazy lub konkretnego wyrażenia. Dwie kolumny o tym samym typie VARCHAR mogą więc zachowywać się inaczej, jeśli mają różne kolacje. Sam fakt użycia VARCHAR nie określa, czy porównanie będzie czułe na wielkość liter albo polskie znaki.

Gdzie powstaje zależność między typem a kolacją

Zależność między CHAR lub VARCHAR a kolacją polega na tym, że typ określa charakter przechowywanej wartości, a kolacja określa sposób interpretowania tej wartości przy operacjach tekstowych. Typ nie jest zamiennikiem kolacji i kolacja nie zmienia VARCHAR w CHAR. Kolumna VARCHAR nadal przechowuje tekst o zmiennej długości, lecz zapytania wykonywane na tej kolumnie mogą stosować określony porządek sortowania i określone zasady równoważności znaków. To rozdzielenie jest ważne przy projektowaniu tabel, ponieważ wybór typu i wybór kolacji rozwiązują dwa różne problemy.

Praktyczny problem pojawia się przy łączeniu, porównywaniu lub sortowaniu kolumn o niezgodnych ustawieniach. Silnik może zgłosić błąd niezgodności kolacji, zastosować reguły jednej ze stron albo wykonać konwersję, która zmieni wydajność zapytania. Szczególną uwagę należy zwrócić na indeksy. Jeżeli warunek wyszukiwania wymusza konwersję kolumny lub zastosowanie innej kolacji, indeks może nie zostać wykorzystany w taki sposób, jak oczekiwano. Wpływ na wynik mogą mieć także końcowe spacje, ponieważ sposób ich uwzględniania przy porównaniach różni się między silnikami i konkretnymi operatorami. Nie należy więc przenosić założeń z jednej bazy danych do innej bez sprawdzenia dokumentacji.

Projektowanie kolumn tekstowych i sprawdzanie wyników

Przy projektowaniu tabeli warto najpierw ustalić znaczenie danych. Kod o stałym formacie może uzasadniać użycie CHAR, lecz tylko wtedy, gdy jego długość i sposób obsługi spacji są dobrze zdefiniowane. Dla tekstów o zmiennej długości naturalnym wyborem jest VARCHAR z limitem dopasowanym do rzeczywistych wymagań. Następnie trzeba określić, czy wyszukiwanie ma rozróżniać wielkość liter, czy znaki diakrytyczne mają mieć odrębne znaczenie oraz jaki porządek sortowania jest oczekiwany. Te decyzje powinny być zapisane w schemacie, a nie pozostawione przypadkowemu ustawieniu środowiska.

Diagnostyka problemu powinna obejmować definicję kolumny, kolację przypisaną na poziomie kolumny i tabeli, kodowanie połączenia aplikacji oraz rzeczywiste dane zawierające wielkie litery, polskie znaki i końcowe spacje. Należy osobno sprawdzić równość wartości, kolejność sortowania, działanie indeksu i wyniki po imporcie danych z innego systemu. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów i komputerów PC. W przypadku problemów z aplikacją bazodanową działającą lokalnie na komputerze można rozpocząć od ustalenia, czy przyczyną jest konfiguracja programu, błędne dane wejściowe czy niezgodne ustawienia tekstowe.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę