You are on page 1of 25

Kodowanie znaków

Adrian pytel
Kodowanie znaków
Kodowanie znaków
Serwer MySQL jest przystosowany do obsługi wielu standardów kodowania
znaków. Do użytkownika należy wybór, z jakiego kodowania chce
skorzystać.

Wybór standardu kodowania może odbywać się na poziomie serwera, bazy,


tabeli, kolumny.
Kodowanie znaków
W typowych zastosowaniach można ograniczyć się do ustawienia
odpowiedniego kodowania dla serwera, które automatycznie wymusi
prawidłowe, domyślne ustawienia zestawu znaków dla wszystkich
pozostałych elementów (baz, tabel, kolumn).
Kodowanie znaków
Określenie reguł kodowania znaków wymaga wyboru odpowiedniego
zestawu znaków oraz reguł porównania tych znaków między sobą.

Każdy zestaw znaków posiada domyślny zestaw reguł porównywania, a


zatem wystarczy jedynie wybór samego zestawu znaków.
Kodowanie znaków
Informacje na temat serwera uzyskujemy po wpisaniu polecenia STATUS.
Kodowanie znaków
Sprawdzanie kodowania bazy danych uzyskamy za pomocą polecenia:
SHOW CREATE DATABASE nazwa_bazy;
Kodowanie znaków
Obsługiwane przez MySQL standardy kodowania można zobaczyć po
wydaniu polecenia:

SHOW CHARACTER SET;


Kodowanie znaków
SHOW CHARACTER SET;
Kodowanie znaków
Dostępne reguły porównywania znaków uzyskamy za pomocą polecenia
SHOW COLLATION.
Kodowanie znaków
W przypadku polskich znaków narodowych do wyboru są cztery reguły
kodowania:

• utf8 – standard Unicode


• latin2 – standard ISO-8859-2
• cp1250 – standard Windows-1250
• cp852 – stosowana w DOS-ie strona kodowa852
Kodowanie znaków
Domyślne odpowiadające im reguły porównania:

• utf8_general_ci (utf8_polish_ci)
• latin2_general_ci
• cp1250_general_ci
• cp852_general_ci
Kodowanie znaków
Serwer będzie wykorzystywał jeden z wymienionych zestawów znaków,
jeśli w pliku konfiguracyjnym my.ini znajdzie się wpis

character-set-server=nazwa_standardu

character-set-server=latin2
Kodowanie znaków
character-set-server=nazwa_standardu
Kodowanie znaków
Kodowanie można zdefiniować podczas uruchamiania serwera z opcją:

--character-set-server=nazwa_standardu
Kodowanie znaków
Kodowanie MySQL UTF-8 wykorzystuje maksymalnie 3 bajty, podczas gdy
do zakodowania pełnego zestawu znaków UTF-8 wymagane są 4 bajty.
Jest to dobre dla wszystkich znaków językowych, ale jeśli potrzebujesz
obsługiwać różnorodne symbole, wymagają one czterobajtowego
kodowania, które nie jest obsługiwane w MySQL UTF-8. Więc jeśli
używasz od MySQL 5.5.3 lub nowszego zalecane jest utf8mb4 zamiast
UTF-8 jako zestawu znaków bazy danych, tabeli, wiersza.
Kodowanie znaków
W nowych projektach bazy danych MySQL zalecane jest używanie
kodowania utf8mb4, które rozwiązuje problemy występujące przy
kodowaniu utf8. W całym projekcie kodowanie znaków ustawiamy na
utf8mb4, zaś kodowanie dla kolejności sortowania ustawiamy na
utf8mb4_unicode_ci (m.in. polskie znaki MySQL, bez rozróżniania wielkości
liter).
Kodowanie znaków
Ustawienie zestawu znaków dla serwera to nie wszystko. Każde połączenie
z serwerem na przypisane odpowiednie reguły kodowania, a związku z
tym dla każdego połączenia te reguły mogą być inne. Serwer musi
wiedzieć jaka strona kodowa została użyta w wysyłanym przez klienta
zapytaniu oraz jakiej strony kodowej ma użyć w odpowiedzi.
Kodowanie znaków
Kwestie te reguluje kilka zmiennych serwera.
Ustawienie można przeprowadzić poprzez wykonanie jednej instrukcji.

SET NAMES ’nazwa_zestawu_znaków’

W celu stawienia kodowania UTF-8 należy skorzystać z instrukcji:

SET NAMES ’utf8’;


Kodowanie znaków
Tworzenie bazy danych z domyślnym zestawem znaków:

CREATE DATABASE kodowanie CHARACTER SET utf8;


Kodowanie znaków
Tworzenie bazy danych z domyślnym zestawem znaków oraz domyślnymi
regułami porównania:

CREATE DATABASE kody CHARACTER SET utf8 COLLATE


utf8_polish_ci;
Kodowanie znaków
Ustawienie kodowania znaków dla bazy danych:

ALTER DATABASE nazwabazy CHARACTER SET utf8;

ALTER DATABASE nazwa_bazy CHARACTER SET utf8 COLLATE utf8_general_ci;


Kodowanie znaków
Ustawienie kodowania znaków dla tabeli:

ALTER TABLE nazwatabeli CHARACTER SET utf8;

ALTER TABLE nazwatabeli CHARACTER SET utf8 COLLATE utf8_polish_ci;


Kodowanie znaków
Ustawienie kodowania znaków dla kolumny:

ALTER TABLE nazwatabeli MODIFY nazwakolumny varchar(40) CHARACTER SET utf8;

ALTER TABLE nazwatabeli MODIFY nazwakolumny varchar(40) CHARACTER SET utf8 COLLATE
utf8_slovak_ci;
Kodowanie znaków
Konwertowanie znaków:

ALTER TABLE nazwa_tabeli CONVERT TO CHARACTER SET utf8


COLLATE rodzaj_kodowania;

You might also like