Латинские символы в phpMyAdmin с параметрами сортировки UTF-8
Мой веб-сайт использует:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
И эта мета:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Я создал свою базу данных и таблицы в phpMyAdmin, убедившись, что все задано как utf8_unicode_ci (таблица, поля, база данных), даже параметры сортировки соединений.
Когда я вставляю некоторые латинские символы (акценты, - и тому подобное) в базу данных, используя стандартную форму, созданную на PHP, это работает нормально, я могу без проблем отображать сохраненные данные на своем веб-сайте. Но если я перейду в phpMyAdmin, все латинские символы будут все перепутано, что-то вроде "±"±"±".
Если я попытаюсь исправить эти данные в phpMyAdmin, то мой веб-сайт отобразит данные неправильно, со странными символами ���.
Что в этом мире я делаю не так? Я пытался разобраться в этом в течение нескольких часов, но безуспешно.
Спасибо вам всем!
8 answers
Как говорит @Artefacto, это может быть проблемой, локальной для phpMyAdmin.
Если phpMyAdmin в порядке (т.Е. Установлен в UTF-8), и данные по-прежнему отображаются странно, то посмотрите, использует ли ваша база данных соединение также UTF-8?
mysql_query("SET NAMES utf8")
(или что бы вы ни использовали в качестве библиотеки базы данных) может помочь, если это не так.
Если phpMyAdmin показывает ñññ
вместо ñññ
, это потому, что он интерпретирует байтовый поток UTF-8 как ISO-8859-1. Таким образом, содержимое вашей базы данных, вероятно, правильно, phpMyAdmin просто показывает их неправильно.
Я не знаком с приложением, но вы можете заставить браузер читать страницу как UTF-8 (обычно Просмотр > Кодировка > UTF-8).
Для вопроса Скуззу есть несколько способов:
Http://www.mysqlperformanceblog.com/2007/12/18/fixing-column-encoding-mess-in-mysql/
У меня было бы еще восемь ссылок с различными задачами, но этот сайт мешает мне сохранить их...
"в качестве механизма предотвращения спама новые пользователи могут размещать не более одной гиперссылки"
Mysql_query ("НАБОР ИМЕН utf8") решил мою проблему.
Проблема: Символы отображаются правильно в phpMyAdmin, неправильно в HTML/PHP. Символы: "," и т.д.
Заголовки в порядке (utf8), phpmyadmin отображает содержимое в правильной форме, но на веб-сайте продолжают отображаться странные знаки вопроса (внутри символа черного алмаза).
HTML-код:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Решение: Я добавил в php (предшествующий любому другому запросы):
mysql_query("SET NAMES utf8");
К такому поведению могут привести и другие причины; это только одна часть решения. Возможно, вам потребуется проверить тип контента, конфигурацию веб-сервера (httpd.conf), язык html/dir, кодировку и т.д. Тем не менее, знак вопроса в черном ромбе, кажется, более специфичен для этой проблемы/решения, в других случаях отображаются 2-3 странных символа вместо того, который вы хотите.
После выполнения mysql_query("SET names 'utf8';");
Вам также нужно перейти в MySQL и определить параметры сортировки как UTF-8, также!
Это должно решить вашу проблему.
Удачи!
1 - Редактировать файл:
Мой.ini (MSWINDOS)
мой.cnf (GNU/linux)
2 - Найдите запись [mysqld] и добавьте:
character-set-server = utf8
skip-character-set-client-handshake
Весь вид должен выглядеть следующим образом:
[mysqld]
port=3306
character-set-server = utf8
skip-character-set-client-handshake
3 - Перезапустить службу MySQL!
Если phpMyAdmin в порядке (т.Е. Установлен в UTF-8), и данные по-прежнему отображаются странно, то посмотрите, использует ли ваше подключение к базе данных также UTF-8?
Просто установите mysql_query("SET NAMES utf8");
после mysql_connect
строка:
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_query("SET NAMES utf8");
Я столкнулся с той же проблемой и, наконец, нашел элегантный способ проверки и изменения параметров сортировки с помощью функции PHP mysqli_set_charset
. Следующий фрагмент кода должен быть включен между проверкой $conn
и запросом $sql
:
if (!mysqli_set_charset($conn, "utf8")) {
printf("Error loading character set utf8: %s\n", mysqli_error($conn)); //optional row
die();
}
Я нашел решение здесь: http://php.net/manual/en/mysqli.set-charset.php