MySQL – baza danych z polskimi znakami

28-lut-2011

Producent oprogramowania zażyczył sobie, aby baza danych mySQL pracowała z kodowaniem znaków cp1250.

Polecenie zakładające bazę danych pracującą domyślnie z zestawem znaków w CP 1250 wygląda następująco:

CREATE DATABASE faktury DEFAULT CHARACTER SET cp1250;

W ten sposób utworzona baza danych będzie już poprawnie przechowywać napisy kodowane w CP 1250, aby jednak nie było wątpliwości co do poprawnego sortowania rekordów należy jeszcze ustalić tzw. Collation. Poprawnym Collation wydaje się w tym przypadku cp1250_polish_ci. CP 1250 to tutaj oczywiście nazwa kodowania znaków, polish, mówi o zastosowanej kolejności znaków używanej podczas sortowania i dobranej idealnie pod polskie warunki. Ostatnie dwa znaki ci, są skrótem od case insensitive, czyli sortowanie ma się odbywać niezależnie od wielkości znaków. Komenda może się więc prezentować następująco:

CREATE DATABASE faktury DEFAULT CHARACTER SET cp1250 COLLATE cp1250_polish_ci;

Niestety w moim przypadku otrzymałem komunikat:

ERROR 1273 (HY000): Unknown collation: 'cp1250_polish_ci'

W takim razie należałoby sprawdzić, jakie wersje porządku sortowania występują na moim serwerze:

show collation;

W wyniku otrzymałem sporą tabelę, w której najtrafniejszym wyborem wydaje się być cp1250_general_ci. Co oznacza general? Ot po prodtu – ogólnie, jak sprawdzić czy to sortowanie jest dobre? Przejrzałem tabelę spod adresu:

http://www.collation-charts.org/mysql60/mysql604.cp1250_general_ci.html

Ufff, po a jest ą, bo c jest ć, czyli ten sposób sortowania znaków jest dobry! Ostatecznie komnda tworząca poprawną bazę danych to:

 CREATE DATABASE faktury DEFAULT CHARACTER SET cp1250 COLLATE cp1250_general_ci;

Dla uzupełnienia – jeżeli chcesz wyświetlić listę dostępnych CHARACTER SET-ów posłuż się komendą:

SHOW CHARACTER SET;

Przydatne linki:

Komentarze są wyłączone

Autor: Rafał Kraik