EDIT: после обратной связи с моим оригинальным сообщением я изменил текст, чтобы уточнить мою проблему.Проблемы с кодированием в PHP/MySQL
У меня есть следующий запрос (псевдо-код):
$conn = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query("SET NAMES 'utf8'; COLLATE='utf8_danish_ci';");
mysql_query("SELECT id FROM myTable WHERE name = 'Fióre`s måløye'", $conn);
Это возвращает 0 строк.
В моем логфайле, я вижу это:
255 Connect [email protected] on
255 Query SET NAMES 'utf8'; COLLATE='utf8_danish_ci'
255 Init DB norwegianfashion
255 Query SELECT id FROM myTable WHERE name = 'Fióre`s måløye'
255 Quit
- Если я выполнить запрос непосредственно в PhpMyAdmin, я получаю результат.
- Таблица кодировки: UTF-8
- кодирование HTML страницы: UTF-8
- Я могу добавить записи (из формы ввода), где имена используются акценты (например, «Fióre`s Hasselberg»)
- я могу читать записи с акцентом при использовании -> «имя, как„$ Метка_строки%“»
- информация в БД выглядит хорошо
Я понятия не имею, почему я не могу выбрать ни одной строки, имя которого имеет акцент символов.
Я действительно надеюсь, что кто-то может мне помочь.
ОБНОВЛЕНИЕ 1: Я пришел к компромиссу. Я буду конвертировать акценты с htmlentities при хранении данных и html_entity_decode при извлечении данных из БД. Кажется, это работает.
Единственный недостаток, который я вижу до сих пор, заключается в том, что я не могу читать имена в cleartext, используя phpMySQL.
Можете ли вы разместить вызов функции так, как вы ее используете в своем сценарии? И можете ли вы напечатать $ sql и посмотреть, как он выглядит? –
Готово. Если я возьму полученный sql и использую его непосредственно в PHPMyADmin, он отлично работает. Я получаю результат, который хочу. – Steven
Какую кодировку вы используете в своем PHP-файле, где вы объявляете этот запрос выше? Вы также должны использовать UTF-8, чтобы не было конфликтов. – Gumbo