Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Пару недель назад поставил свой веб-сервер так как наконец-то решил занятся изучением PHP и MySQL, все работало отлично, но вот вчера столкнулся с такой проблемой: если пытаюсь выбрать из MySQL таблицы что-либо занесенное туда на русском языке, то мне в браузере вместо этого показывает не то что надо, а знаки вопросов. Мне должно было вывестись имя Алексей, а вместо него выводится ???????.
Версия MySQL - 5.0.45.
Версия phpMyAdmin - 2.10.2.
MySQL-кодировка: UTF-8 Unicode (utf8).
Сопоставление соединения с MySQL: utf8_general_ci.
Сама БД создана тоже в utf8_general_ci.
Вот код моего скрипта:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Соединяемся с БД</title>
</head>
<body>
<?php
$db = mysql_connect("localhost", "login", "password");
mysql_select_db("firstbd", $db);
$result = mysql_query("SELECT * FROM firma", $db);
$myrow = mysql_fetch_array($result);
echo "Его имя - $myrow[name]";
?>
</body>
</html>
Пытался менять:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> на <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> ;
Сопоставление соединения с MySQL: utf8_general_ci менял на cp1251_general_ci ;
Так же менял кодировку самой БД шел в эту БД - Операции - В разделе СРАВНЕНИЕ выбирал cp1251_general_ci ;
Все это оказалось безрезультатно, по прежнему место желаемого русского текста остаются знаки вопросов.
Вот скриншот того что мне отображается в браузере:
Подскажите пожалуйста что делать!
Неактивен
После mysql_select_db("firstbd", $db); попробуйте добавить
mysql_query("SET NAMES UTF8");
Если это не поможет, значит данные уже в базе искажены, см. http://sqlinfo.ru/articles/encoding/
Неактивен
Огромное спасибо! Помогло!
Неактивен
Тоесть это кодировка с одного языка на другой ?
спасибо.
Неактивен
Кодировка не бывает с языка на язык. Кодировка — это способ представления
данных: буквы все равно хранятся как числа. Но в разных кодировках эти числа
могут представлять разные буквы. Например, одно и то же число представляет
в кодировке cp1251 букву «в», а в latin1 — «â».
Неактивен
Помогите пожалуйста с этой же проблемой.
Я хочу сделать сайт с инсталятором (точнее у меня получилось уже) и создавать базы данных и таблицы в них не с помощью phpMyAdmin - а собственным php-кодом.
Долго не мог понять, почему у меня БД создается, Таблица создается - а данные не вносятся.
Потом попробовал через форму вводить английский текст - всё стало работать. Цифры - тоже ОК. Как только русский - тут же не смог.
Начал смотреть PHPmyAdmin'ом - а у меня там кодировка сервера - как на картинке1:
Идеальным было бы подсказать мне как изменить строчку подчеркнутую на рис.1 - думаю все проблемы будут решены.
Почему кстати интересно тем же PHPmyAdmin не дает менять эту строку так же, как строку collations.
Начал смотреть в какой кодировке по умолчанию создается моя таблица, которую я заношу PHP-кодом:
Посмотрел так же переменные сервера MySQL (Переменные и настройки сервера):
Переменная Значение сессии Глобальное значение
basedir C:/MySQL_Server_558/ C:/MySQL_Server_558/
character set client utf8 cp1251
character set connection cp1251 cp1251
character set database cp1251 cp1251
character set filesystem binary binary
character set results utf8 cp1251
character set server cp1251 cp1251
character set system utf8 utf8
character sets dir C:\MySQL_Server_558\share\charsets\ C:\MySQL_Server_558\share\charsets\
collation connection cp1251_general_ci cp1251_general_ci
collation database cp1251_general_ci cp1251_general_ci
collation server cp1251_general_ci cp1251_general_ci
datadir C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\Data\
Начал пробовать переконфигурировать сервер MySQL Instance Configuration Wizard - выставлял принудительно cp1251 (третий пункт радиобуттоном выбирается) - всё равно картинка номер1 не изменяется
Посмотрел и принудительно изменил уже в my.ini:
[client]
port=3306
[mysql]
default-character-set=cp1251
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/MySQL_Server_558/"
#Path to the database root
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=cp1251
Что ещё нужно то?
Я и перезагружал, и стопал-стартил все службы (и Мускул и Апач). И с бубном и иначе - нифига.
Сделал схему, когда у меня стали добавляться в таблицу данные на русском только способом подгона в PHPmyAdmin строки:
Сопоставление соединения с MySQL: utf8_unicode_ci
НО - одно большое НО!
Теперь всё вносится, но т.к. броузер настроен на ср1251 - из формы ввода данные летят в кодировке ср1251 и в отображении содержимого таблицы PHPmyAdmin вопросительные знаки (????????????) вместо слов.
Главное это всё на сервере 2003 выделенным под эти цели не работает - всё ставил отдельно (апач 2.2.3, Мускул 5.5.8, ПХП 5.2.) - установил на своей машине Денвер - там в PHPmyAdmin всё прекрасно:
MySQL-кодировка: Windows Cyrillic (cp1251).
Отредактированно KJIaBogaB (24.12.2010 01:09:49)
Неактивен
Это ошибка phpMyAdmin, к MySQL она имеет мало отношения. Возьмите любой
работающий клиент, и смотрите через него.
Но вообще говоря, сопоставление при работе phpMyAdmin при работе с MySQL
не должно Вас пугать. Последний отлично перекодирует данные налету, лишь бы
они были правильно написаны в таблице (т.е. совпадали с кодировкой таблицы).
Неактивен
paulus написал:
Это ошибка phpMyAdmin, к MySQL она имеет мало отношения. Возьмите любой
работающий клиент, и смотрите через него.
Но вообще говоря, сопоставление при работе phpMyAdmin при работе с MySQL
не должно Вас пугать. Последний отлично перекодирует данные налету, лишь бы
они были правильно написаны в таблице (т.е. совпадали с кодировкой таблицы).
А не подскажете мне (очень хочется) изменить кодировку по умолчанию на Мускул сервере?
У меня сейчас (как я уже говорил) MySQL-кодировка: UTF-8 Unicode (utf8)
А мне кровь из носу необходимо (по разному роду причин) сделать так, чтобы кодировка была стандартной виндовой ср1251.
Причины банальны:
1) Не зная как изменить кодировку на сервере - стыдно будет вообще писать программу под этот сервер
2) Наиболее часто используемая в РуНете (имхо) кодировка Windows СР1251 Cur. Она поддерживает все нужные мне языки (русский и английский) - а этого лично мне за глаза, т.к. я больше 2 языков не планирую использовать вообще.
3) Хочется так же проверять PHPmyAdmin'ом всё то, что буду делать PHP кодом. Имхо наиболее популярный клиент. Всё бесплатно. Я диплом пишу и у меня все продукты для написания программы - бесплатные.
4) При переносе в тот же денвер или на другой аналогичный сервер моей базы данных боюсь столкнуться с граблями, которые сейчас у меня во лбу торчат и я как не пытаюсь - не могу их вытащить (видимо лоб деревянный)
Помогите пожалуста изменить кодировку сервера.
У меня просто подозрение, что переменные эти хранятся ещё где-то (помимо my.ini - возможно ещё и в реестре). Есть способы смены кодировки описаны очень красиво и доходчиво - но у меня тоже не работают:
http://www.tmanager.ru/russian/charset.html
И ещё я не понял - глюк ПХПмайАдмина в том, что он отображает кодировку сервера неправильно, или в том, что он в таблицах ??????? показывает?
Неактивен
Отвечу, пожалуй, по Вашим пунктам.
1. Хорошо, что Вы это осознаете. Столько народу пишет программы, не разбираясь.
По принципу «и так сойдет».
2. Это было так лет 10 назад. Сейчас не поддерживать utf8 так же странно, как
использовать windows2000. Работать, конечно, будет, но есть же новые технологии.
3. Да, наиболее популярный, но это не делает его качественным, к сожалению.
Проверять в phpMyAdmin можно, но держите еще какой-то работающий клиент так,
чтобы ошибки phpMyAdmin не считать своими Особенно это касается поддержки
кодировок в нем. Потому что пункт 1.
4. Денвер обладает тем же преимуществом, что и phpMyAdmin — он легко запускается.
И теми же минусами — если что-то работает (или не работает) в денвере — ничего
не означает. У разработчиков денвера очень странный взгляд на жизнь. Лучше поставь-
те приложения вручную. Будет работать не хуже (обычно — лучше), но Вы будете
контролировать все настройки самостоятельно.
Кодировка сервера меняется через default-character-set. Важно понимать, что кодировки
бывают разные: кодировка сервера, кодировка базы данных, кодировка таблицы, коди-
ровка столбца, кодировка подключения. Если хотите сделать современное приложение,
лучше со стороны сервера держите всё в utf8. Если Вам действительно нужно получать
cp1251 со стороны клиента — просто после подключения выполните SET NAMES cp1251.
И всё. Не усложняйте себе жизнь.
Неактивен
Полагаю, если всё же кодировка UTF-8 у меня работала - под неё и надо делать !
Большое спасибо за советы !!!
PS:
Сегодня проверил свои таблицы в базе нормальным клиентом (MySQL Workbench 5.2.31 CE / Revision 7110) на предмет корректного отображения кодировки. Результат на экране
Сейчас качаю бесплатный EMS SQL Manager 2010 for MySQL - проверю им. Но скорее всего будет тоже самое.
Самое смешное, что броузер отображает верно мною написанную страницу на PHP - но при загрузке страницы кодировка ср1251.
Какой-то коварный глюк
Может переустановить "с нуля" сервер начиная с ОС win2003 ?
Отредактированно KJIaBogaB (28.12.2010 23:26:31)
Неактивен