Důležitá nastavení v MySQL

Odesláno v September 14, 2005 | Kategorie MySQL | 2 Comments

Po úspěšné instalaci vývojového prostředí MySQL, PHP a Apache si dnes nastavíme znakovou sadu, kterou bude MySQL používat jako výchozí pro vytváření nových tabulek. Moje oblíbená je cp1250, tedy české Windows a stejně jako já ji používá i mnoho hostingů v kraji českém. Pokud chcete jinou, možností je přehršel.

Při nastavení Latin1 (Swedish), která je nastavena v MySQL jako výchozí, však dochází k překódování znaků při vkládání nebo exportu. Pokud bychom ponechali jako výchozí Latin1, připravujeme si živnou půdu pro mnoho budoucích problémů.

Jdeme na to.

Otevřeme soubor

C:/xampp/xampp/mysql/bin/my.cnf

a změníme řádky:

# The MySQL server
[mysqld]
old-passwords
port = 3306
socket = mysql
skip-locking
# default-character-set=utf8
character-set-server = cp1250
collation-server = cp1250_general_ci
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
net_buffer_length = 8K
myisam_sort_buffer_size = 64M
# log-bin
server-id = 1
thread_cache = 8

Restartujeme MySQL server. Nové tabulky se od této chvíle budou vytvářet v defaultní znakové sadě CP1250. Staré tabulky ale zůstanou v původní znakové sadě. U systémových je nám to šumák, ostatní budete muset zkonvertovat nebo radši vytvořit znovu.

Ověřujeme nastavení

Možná že si nejste jisti, zda se nám vše podařilo správně nastavit. Ověříme si to:

Spusťte databázovou konzoli

C:/xampp/xampp/mysql/bin/mysql.exe

a zadejte příkaz

show variables;

Středník na konci je důležitý, znamená ukončení řádku (příkazu). Vzápětí se nám zobrazí dlouhý výpis proměnných. Důležité jsou řádky

| character_set_database    | cp1250                               |
| character_set_results     | latin1                               |
| character_set_server      | cp1250                               |
| character_set_system      | utf8                                 |
| character_sets_dir        | C:/xampp/xampp/mysql/share/charsets/ |
| collation_connection      | latin1_swedish_ci                    |
| collation_database        | cp1250_general_ci                    |
| collation_server          | cp1250_general_ci                    |
| concurrent_insert         | ON                                   |

Zbývající charsety v latin1 nás nezajímají, jsou to znakové sady požité pro připojení z konzole a v PHP si je nastavíme jinak.

Pozn.: Tento článek už je zastaralý, doporučuju používat ve skriptech zásadně znakovou sadu UTF-8.

Komentáře

2 Responses to “Důležitá nastavení v MySQL”

  1. emk on July 13th, 2008 11:55

    Předem se omlouvám, že to co zde “smolím” není komentář k výše uvedenému příspěvku, ale žádost o pomoc.
    V případě že nastala situace, cituji: „Pokud bychom ponechali jako výchozí Latin1, připravujeme si živnou půdu pro mnoho budoucích problémů.“ existuje nějaké „jednoduché“ řešení vzniklé situace.
    Předem děkuji za jakoukoliv odpověď.
    S přáním příjemného (jak u koho) dne Eduard Klimek

  2. Admin on July 18th, 2008 13:50

    Nevím přesně kde je problém, ale naposledy jsem to řešil přes export tabulky. Pro zjištění znakové sady pomůze “show create table xxx_tabulka”.
    Pokud se tam vyskytuje jiný default charset než utf8, vyexportoval jsem celý výpis, překonvertoval v textovém editoru do UTF-8 a za každou definici tabulky jsem pak přidal DEFAULT CHARSET=utf8.
    Jinak ihned po nastavení připojení k databázi nezaškodí poslat příkaz SET NAMES UTF8

Váš komentář: