Mysql болгарские языки, набор символов - PullRequest
1 голос
/ 22 февраля 2012

У меня есть таблица Mysql с несколькими языками, один язык - поле.

Мой набор символов - utf_general_ci

Когда я смотрю в таблицу с помощью phpMyAdmin, у меня появляется болгарская страница, похожая наэто:

За наÑ

Это название.Этот же заголовок отображается на сайте следующим образом:

За нас  (this is correct)

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 22 февраля 2012

ОК, попробуйте выполнить эти запросы до фактической выборки записей:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

После этого приступите к выполнению ваших запросов.Вышеуказанные запросы, если, конечно, должны быть в контексте вашего текущего соединения с базой данных.

1 голос
/ 11 февраля 2014

Какой набор символов используют поля в вашей таблице?Не могли бы вы поделиться соответствующей частью команды SHOW CREATE TABLE для этих полей?

Поскольку ISO-8859-1 является кодировкой базы данных по умолчанию для mysql, и он в основном не выполняет никаких преобразований, люди используют его как BINARY и просто сохраняют в нем кодировку UTF-8.Это хорошо работает с инструментами веб-разработки, поскольку они связываются с полем и получают данные в виде двоичных байтов в кодировке UTF-8, а затем, без преобразования, помещают их на веб-страницу, которая говорит, что для вывода используется кодировка utf-8.Таким образом, данные просто проходят без надлежащего кодирования для использования базой данных.Конечно, это вызывает всевозможные проблемы, когда вы выполняете операции внутри базы данных (например, получаете длину символа и байта и пытаетесь правильно отсортировать).Но для базовых операций сохранения / извлечения похоже, что это работает.Это очень типичное поведение для нелокализованных веб-приложений, которые предполагают, что они максимально работают с ASCII или ISO-8859-1.Решение этой проблемы заключается в создании нового набора таблиц с использованием кодировки UTF-8, а затем в явном виде транскодируют неправильно закодированные данные utf-8 в широкие символы и затем помещают их в таблицу utf-8, чтобы база данных знала правильную кодировку.б.

1 голос
/ 22 февраля 2012

Похоже, что данные имеют кодировку UTF-8 и, следовательно, хорошо работают на веб-странице, объявленной как кодировка UTF-8, но не тогда, когда программа не может обработать или не настроена на применение UTF-8.

Например, символы ° С, встречающиеся дважды: U + 00B0 U + 00D1. Байты 0xB0 и 0xD1 являются формой UTF-8 кириллической строчной буквы a, U + 0430, которая появляется в соответствующих позициях в правильном тексте. Таким образом, очевидно, что данные UTF-8 неправильно интерпретируются в соответствии с ISO-8859-1, Windows-1252 или некоторым другим 8-битным кодированием.

...