Некоторое время я боролся с проблемами кодирования в MySQL. Я создаю базу данных, которая будет содержать не только латинский, но и кириллический и арабский текст. Итак, вот пример того, как я создаю базу данных:
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Затем таблица:
CREATE TABLE TempTb1 ( ID INT PRIMARY KEY, name VARCHAR(100) NOT NULL, arabic VARCHAR(100) NOT NULL ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
И когда я помещаю некоторые данные и выбираю их, я получаю только некоторые странные символы. Поэтому я написал небольшой скрипт PHP для тестирования, но он не работает:
<?php header('Content-type: text/plain; charset=utf-8'); $a = mysql_connect('localhost','root','') or die('Problem connecting to database!'); $b = mysql_select_db('db1') or die('Problem selecting database'); mysql_set_charset('utf8'); mysql_query("set names 'utf8'"); mysql_query('set character set utf8'); $query = mysql_query("SELECT * FROM Tb1;"); while($row = mysql_fetch_assoc($query)) { $id = $row['ID']; $name = $row['name']; $arabic = $row['arabic']; echo $id.' '.$name.' '.$arabic.PHP_EOL; } ?>
Я тестировал с utf8_unicode_ci
и utf8_general_ci
. Что может быть неправильным? BTW У меня есть EasyPHP 5.2.10.
Что бы ни случилось с вашими персонажами, это происходит до того, как они доберутся до MySQL. Когда мы вводим символы, символы преобразуются в номера на компьютере. Затем эти номера перемещаются отсюда туда, между веб-формами и серверами, веб-серверами и интерпретаторами сценариев, а затем серверами баз данных и обратно на веб-страницы, следуя тем же способом.
Где и как вы вводите свои данные? Данные должны выйти из способа ввода. Если ваши данные предоставляются через веб-формы, проверьте кодировки своей веб-страницы и способы отправки форм. Как вы получаете их в своих PHP-скриптах и как вы отправляете их на сервер базы данных. Виноватая часть здесь, вероятно, не MySQL, а другое место. Это тоже может быть MySQL; но это не единственное место возможного неправильного поведения, и, вероятно, это не так.
Проверьте свои страницы, проверьте заголовки, когда они прибудут в ваш браузер.
О комментариях, которые вы получили, нет, это нехорошо использовать ISO5, потому что вам нужно несколько семейств ISO5. В большинстве случаев вы должны использовать кодировку Unicode, лучше всего использовать utf-8. Кроме того, это не о том, какую библиотеку MySQL вы используете, если в этой библиотеке не обнаружены некоторые известные ошибки, которые маловероятны для чего-то старого. 🙂 Вы все равно должны использовать все, что рекомендуется в качестве лучших практик; но ваша текущая проблема не связана с используемой вами библиотекой. Зло отличается от того, как вы вводите свои данные и как вы его просматриваете.
убедитесь, что у вас есть эта мета в заголовке вашей страницы
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
Также вы можете попробовать выполнить этот запрос сразу после подключения к db:
"SET NAMES 'utf8'"
Надеюсь это поможет. ура