The Diary
Дневника на Сашо
<- Предишен запис (2008-04-17) | Дневника | Следващ запис (2008-04-30) ->
Архив
Вторник, 22 Април 2008
Как да накараме Ейч Ти Ем Ел-а, Пъ Хъ Пъ-то и Мускула да говорят UTF-8
Трудно но не и невъзможно. Приемене че това са три животни, едното е водно, другото тревопасно а третото хищник. Тая тема е иницирана от това че сам си започнах софта за контролерите OMRON. За HTML да го накараме правилно да визуализира UTF-8 се правят две неща, едното е да се зададе правилния DOCTYPE <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> още в началото на файла, а после в главата да се зададе чрез мета таг content-type <meta http-equiv="content-type" content="text/html; charset=UTF-8">. Също е много важно самата кодировка на php и html файловете да ви е UTF-8, при мен е "UTF-8 without BOM" (ползвайте читав сорс код редактор като... отговор по запитване...). Опираме до PHP-то, има настройка(клауза или както и да се казва на Български език) - default_charset в php.ini е най-добре да се остави коментирано (както е при мене), но може и default_charset = "windows-1251" или default_charset = "UTF-8". И най-накрая опираме до кръвожадни Мускул (Александър Керемидарски & Компания да не четат по нататък). Прочетох това-онова в интернет, изпробвах го и стана. От версия 5 и нагоре в Мускула на базата, таблиците и полетата може да им се задават различни енкодинг и колации (encoding, character encoding, collation). При създаването на базата зададох това:
create database 'my_database' CHARACTER SET utf8 COLLATE utf8_unicode_ci;
а при създаването на таблиците
CREATE TABLE `nomenklatyri` (
`nomenklatyri_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`nomenklatyri_name` TINYTEXT NOT NULL ,
...
PRIMARY KEY ( `nomenklatyri_id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
това не беше всичко защото на едно място прочетох че винаги изрично да се уведомява mysql какъв енкодинг да използва по време на всяка конекция (connection):
$link = mysql_connect('host', 'user', 'password');
mysql_query('set names utf8', $link);
По този начин, дори на Мускула character set по подразбиране да е cp1251 или друг, данните към и от сървъра за вашето php приложение ще се обменят в utf8 encoding. В крайна сметка трябва да си конфигурирате и Мускула 
С бозаво са настройки на сървъра които съм променил. Сега забелязах че при правенето на базата изпалзвам utf8_unicode_ci а при таблиците utf8_general_ci. Четох и за тях!!! Първото utf8_unicode_ci е разширен набор от символи и работи по-бавно (каквото и да значи това, просто така го прочетох) от второто utf8_general_ci. За utf8_general_ci казват че пресъздават отлично Български и Руски но не се справят със Сръбски, Югозападно Българско наречие и други "кирилици". За тях е по-подходяща колация utf8_unicode_ci. Ето още по въпроса http://www.joomla-bg.net/MySQL_enkoding_i_kolatsiya_s_kirilitsa/MySQL_i_baza_danni_s_kirilitsa
Eий че съм бързак!!! Отидох до магазина за 4 минути да купя хранителни продукти, защото аз се грижа за домакинството, а жената я държа за хубост. Времето се беше смрачило и аха да завали и затова се забързах. Прибрах се в блока не валеше, но като се качих в апартамента отвън валеше като изведро...
Comments, texts and pictures not signed by me are property of their respective owners.
(c) 2003-2005 by Georgi Chorbadzhiyski. Some rights reserved.
Страницата е генерирана от Glog v3.50