Избор на колацията за базата данни – вариант II
Автор: adrian
В предния урок написах, че по-добрият вариант според мен е 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. Файлът трябва да има
IV. След като направим връзката към базата данни и я селектираме трябва да добавим този ред ЗАДЪЛЖИТЕЛНО:
mysql_query(„SET CHARACTER SET utf8“);


