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:
- opis składni show: http://dev.mysql.com/doc/refman/5.0/en/show.html
- tabele opisujące character set: http://www.collation-charts.org/mysql60/