Intereting Posts
Производительность экземпляров mySQL RDS на Amazon Webservice Доступ к событиям календаря Google из учетной записи службы: {"error": "access_denied"}. Нет приложений Google Как извлечь текст из текстового файла .doc, docx, .xlsx, .pptx php Symfony2: Получение маршрута в Слушателе загрузки страницы Zend Framework 2 – Удаленный элемент формы приводит к отказу проверки Раздутый PDF, созданный TCPDF WordPress: Добавить пустой элемент списка в меню навигации Ошибка синтаксиса MySQL ON DUPLICATE KEY UPDATE Что быстрее? Константы, переменные или переменные массивы Как получить уникальные значения из столбца и сгруппировать их со значениями из другого столбца? Что такое URL-адрес схемы facebook.com/sharer.php ios / android для мобильных сайтов? Получите все записи из базы данных MySQL, которые находятся в Картах Google .getBounds? Получение пустой страницы PHP поверх Apache Создание рекурсивной функции дерева деревьев Кэширование запросов в MySQL

Использовать utf8 или нет – проблема с кодировкой символов MySQL и PHP

У меня есть строка, хранящаяся в MySQL, как это: یکی از Ø где набор символов моей таблицы – utf8 а сортировка – utf8_general_ci .

Когда я извлекаю строку из MySQL, браузер показывает ее так: یکی از بهترین راه и все в порядке (это персидский язык).

Заметка:

Теперь мне нужно использовать mysql_query("SET NAMES 'utf8'"); ,

Но после его использования браузер показывает такую ​​строку: یکی از Ø (так же, как и в MySQL).

Как я могу изменить мои сохраненные записи MySQL и решить мою проблему? Или использовать некоторый код PHP для преобразования выходной кодировки?

Related of "Использовать utf8 или нет – проблема с кодировкой символов MySQL и PHP"

Ваша проблема в том, что ваша команда SET NAMES 'utf8_persian_ci' была недопустимой (utf8_persion_ci – это сортировка , а не кодировка ). Если вы запустите его в терминале, вы увидите сообщение об ошибке Unknown character set: 'utf8_persian_ci' . Таким образом, ваше приложение, когда оно хранило данные, использовало набор символов latin1 . MySQL интерпретировал ваш вход как символы latin1, который затем сохранил в виде utf-8. Аналогично, когда данные были отброшены, MySQL преобразовал его из UTF-8 в latin1 и (надеюсь, большую часть времени) исходные байты, которые вы ему дали.

Другими словами, все ваши данные в базе данных полностью перепутаны, но просто так получилось.

Чтобы исправить это, вам нужно отменить то, что вы сделали. Самый простой способ – использовать PHP:

  1. SET NAMES latin1;
  2. Выберите каждое текстовое поле из каждой таблицы.
  3. SET NAMES utf8;
  4. Обновите те же строки, используя одну и ту же строку без изменений.

В качестве альтернативы вы можете выполнять эти шаги внутри MySQL, но это сложно, потому что MySQL понимает, что данные находятся в определенном наборе символов. Вам нужно изменить текстовые столбцы на тип BLOB, а затем изменить их обратно в текстовые типы с помощью набора символов utf8. См. Раздел внизу документации ALTER TABLE MySQL с надписью «Предупреждение» красным цветом .

После того, как вы выполните одно из этих действий, байты, хранящиеся в столбцах базы данных, будут фактическим набором символов, который, по их утверждению, является. Затем убедитесь, что вы всегда используете mysql_set_charset('utf8') для любого доступа к базе данных с PHP, который вы можете делать в будущем! В противном случае вы снова испортите вещи. (Обратите внимание: не используйте простую mysql_query('SET NAMES utf8') ! Существуют угловые случаи (например, соединение для сброса), где это можно сбрасывать на latin1 без вашего ведома. mysql_set_charset() будет устанавливать кодировку, когда это необходимо.)

Было бы лучше, если бы вы переключились с функций mysql_* и использовали PDO вместо этого с параметром charset=utf8 в вашем PDO dsn .

Вероятно, вам нужно изменить столбец Charset и Collation.

Попробуйте выполнить этот запрос:

 ALTER TABLE `YOUR_TABLE_NAME` CHANGE `YOUR_COLUMN_NAME` `YOUR_COLUMN_NAME` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL 

(В примере я предположил, что VARCHAR имеет значение DEFAULT NULL VALUE)

Если это сработает для вас, вы можете вставить в свой файл my.conf код ниже, чтобы сделать utf8 по умолчанию:

 default-character-set = utf8 

Возможные решения:

  1. Добавьте «AddDefaultCharset UTF-8» в файл .htaccess вашего сайта.
  2. Добавить заголовок ('Content-Type: text / html; charset = utf-8'); в верхней части вашего PHP-файла.
  3. Используйте функцию utf8_encode () php для данных, которые должны отображаться на персидском языке.