Mon, 19 Nov 2007 18:24:07 GMT
Всё началось уже давно, ещё во времена появления на хостингах MySQL-4.1. Дело в том что начиная с этой версии данная СУБД может более корректно работать с разными кодировками. (Я бы даже сказал не более корректно, а вообще конкретно.) По этому многие люди тестирующие скрипты не настроив должным образом сервер, начали удивляться и придумывать себе оправдания.
За кодировку отвечают несколько настроек MySQL и по умолчанию они расчитаны на англоязычные базы данных. Это легко изменить прописав в конфигурационном файле:
[mysqld] collation-server=cp1251_general_ci default-character-set=cp1251 default-collation=cp1251_general_ci
Но тут возникает другой вопрос...
Представьте себе ситуацию, вы сделали скрипт, и хотите хоститься на американском, или китайском, или любом другом сервере. Думаю логично что вы бы хотели чтоб он работал везде. (Если конечно вы не пишите приложение для какого-то конкретного сервера.)
По этому считаю что лучше не сервер настраивать в нужную кодировку, а скрипты писать так чтоб от сервера зависело как можно меньше. (Именно по этому я не навижу модуль Apache "mod_charset")
Переключить кодировку уже в самом скрипте можно двумя способами. Послать запрос СУБД:
SET NAMES 'cp1251';
или использовать функцию PHP (если вы пишите на PHP) mysql_set_charset которая аналогична запросу выше, и используется она просто:
<?php
if ( mysql_set_charset('cp1251', $resource) ) {
echo 'Ok.';
} else {
echo 'Fuck!!!';
}
?>
Но у неё (пока-что) есть один маленький "недостаточек". Она появилась лишь в PHP версии 5.0.7, в то время как на момент написания статьи ещё многие используют на своих серверах РНР 4 (обидно, но факт.)
© 2007 Vladson.