Избор на колацията за базата данни - вариант II
22-12-2009
В предния урок написах, че по-добрият вариант според мен е utf8. А това е така, защото с него можем да изкарваме дори арабските и китайски символи без проблеми.

Както и в предишния урок, така и тук първото, което трябва да направим е да създадем базата данни:



Като изберем колацията още при създаването на базата данни си спестяваме избирането на колация при създаването на всяка отделна таблица.

Сега за примера ще създадем пак една таблица my_table и ще вкараме няколко записа в нея:

create table my_table(
id tinyint unsigned auto_increment primary key,
title varchar(255)
);
INSERT INTO `my_table` (`id`, `title`) VALUES
(1, 'Заглавие 1'),
(2, 'Заглавие 2'),
(3, 'Заглавие 3'),
(4, 'Title 4'),
(5, 'Title 5');




След като сме създали базата данни трябва да направим и един файл с meta таг
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Тест на utf-8</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>Някакъв текст за тест</p>
</body>
</html>


ВАЖНО: Ако използваме колация на базата данни utf8_unicode_ci ЗАДЪЛЖИТЕЛНО meta charset трябва да е utf-8

ВАЖНО: Основната разлика между двата начина (windows-1251 и utf-8) е точно тук. При създаването и запазването на файла трябва да сменим кодировката на самия файл да е utf8. Ако не сменим кодировката на файла на utf8 още при тестването на статичната страница ще излязат нежелани символи. Във видео урока съм показал как се сменя кодировката на файла с Notepad++.

След като сме сменили кодировката на файла кирилицата си излиза без никакви проблеми. Сега ще изкараме резултатите от базата данни със следния код:

<?php
$connect = mysql_connect("Хост", "Потребител", "Парола")
or die("Не може да свърже с базата данни");
mysql_select_db("my_database", $connect)
or die("Не може да селектира базата данни");
$result = mysql_query("SELECT title FROM my_table")
or die("Не може да изпълни заявката");
while($row = mysql_fetch_array($result)) {
echo $row['title']."<br />";
}
?>


Както виждате кирилицата сега не излиза. Тук идва и най-важният момент в урока. Трябва да добавим

mysql_query("SET CHARACTER SET utf8");


непосредствено след
mysql_select_db("my_database", $connect)
or die("Не може да селектира базата данни");


и кодът ни ще изглежда по този начин:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Тест на utf-8</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>Някакъв текст за тест</p>
<?php
$connect = mysql_connect("Хост", "Потребител", "Парола")
or die("Не може да свърже с базата данни");
mysql_select_db("my_database", $connect)
or die("Не може да селектира базата данни");
mysql_query("SET CHARACTER SET utf8");
$result = mysql_query("SELECT title FROM my_table")
or die("Не може да изпълни заявката");
while($row = mysql_fetch_array($result)) {
echo $row['title']."<br />";
}
?>
</body>
</html>


ВАЖНО: Винаги когато използваме колация utf8_unicode_ci след селектирането на базата данни трябва да добавим и този ред mysql_query("SET CHARACTER SET utf8"); . Независимо дали ще изкарваме или вкарваме данни в таблицата трябва да напишем тази заявка!

Ето така създадохме сайт и съответната му база данни без никакви проблеми с колацията. Най-важно е да се запомни:
I. При създаването на базата данни трябва да се използва колация utf8_unicode_ci
II. Още при самото създаване на файла трябва да сменим кодировката му на utf8, за да не се получават нежелани ефекти
III. Файлът трябва да има <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
IV. След като направим връзката към базата данни и я селектираме трябва да добавим този ред ЗАДЪЛЖИТЕЛНО:
mysql_query("SET CHARACTER SET utf8");

Файл от урока


Виж и вариант I





/ Трябва да сте регистриран за да напишете коментар /
От: rombeca
12:07 22-12-2009
Браво. Как си мислех да напиша същия урок :). Ако искаш добави и следното:
При използване на PHP5 функцията mysqli (mysql improved), се използва
mysqli_set_charset(). Тогава кода ще стане така:

...
$connect = mysqli_connect("Хост", "Потребител", "Парола")
or die("Не може да свърже с базата данни");
mysqli_select_db("my_database", $connect)
or die("Не може да селектира базата данни");
mysqli_set_charset($connect, 'utf8')
От: xlebabarov
15:00 23-12-2009
:D Тъкмо щях да пиша същия урок! Браво, колега ;)
От: t0m3kk
18:59 23-12-2009
Определено на начинаещите ще им е от полза!
От: amgcompany
17:02 04-04-2011
Браво за урока,открих си къде ми е урока та не ми се появява кирилицата.
1