SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.04.2008 12:47:43

mercury
Участник
Зарегистрирован: 13.04.2008
Сообщений: 3

mysql кодировка

Здравствуйте!
Пару недель назад поставил свой веб-сервер так как наконец-то решил занятся изучением 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 ;

Все это оказалось безрезультатно, по прежнему место желаемого русского текста остаются знаки вопросов.

Вот скриншот того что мне отображается в браузере:
http://img252.imageshack.us/img252/1654/35254718dp3.png

Подскажите пожалуйста что делать!

Неактивен

 

#2 13.04.2008 13:29:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: mysql кодировка

После mysql_select_db("firstbd", $db); попробуйте добавить
mysql_query("SET NAMES UTF8");
Если это не поможет, значит данные уже в базе искажены, см. http://sqlinfo.ru/articles/encoding/

Неактивен

 

#3 13.04.2008 18:09:41

mercury
Участник
Зарегистрирован: 13.04.2008
Сообщений: 3

Re: mysql кодировка

Огромное спасибо! Помогло!

Неактивен

 

#4 09.09.2010 01:54:39

Wolfa
Участник
Откуда: Москва
Зарегистрирован: 09.09.2010
Сообщений: 1

Re: mysql кодировка

Тоесть это кодировка с одного языка на другой ?
спасибо.

Неактивен

 

#5 11.09.2010 13:44:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mysql кодировка

Кодировка не бывает с языка на язык. Кодировка — это способ представления
данных: буквы все равно хранятся как числа. Но в разных кодировках эти числа
могут представлять разные буквы. Например, одно и то же число представляет
в кодировке cp1251 букву «в», а в latin1 — «â».

Неактивен

 

#6 24.12.2010 01:01:29

KJIaBogaB
Участник
Зарегистрирован: 23.12.2010
Сообщений: 5

Re: mysql кодировка

Помогите пожалуйста с этой же проблемой.
Я хочу сделать сайт с инсталятором (точнее у меня получилось уже) и создавать базы данных и таблицы в них не с помощью phpMyAdmin - а собственным php-кодом.
Долго не мог понять, почему у меня БД создается, Таблица создается - а данные не вносятся.
Потом попробовал через форму вводить английский текст - всё стало работать. Цифры - тоже ОК. Как только русский - тут же не смог.
Начал смотреть PHPmyAdmin'ом - а у меня там кодировка сервера - как на картинке1:
http://s40.radikal.ru/i090/1012/88/b904501dba81t.jpg
Идеальным было бы подсказать мне как изменить строчку подчеркнутую на рис.1 - думаю все проблемы будут решены.
Почему кстати интересно тем же PHPmyAdmin не дает менять эту строку так же, как строку collations.

Начал смотреть в какой кодировке по умолчанию создается моя таблица, которую я заношу PHP-кодом:
http://s014.radikal.ru/i327/1012/43/0ead61adfbb5t.jpg
Посмотрел так же переменные сервера 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 не изменяется sad
Посмотрел и принудительно изменил уже в 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)

Неактивен

 

#7 24.12.2010 02:29:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mysql кодировка

Это ошибка phpMyAdmin, к MySQL она имеет мало отношения. Возьмите любой
работающий клиент, и смотрите через него.

Но вообще говоря, сопоставление при работе phpMyAdmin при работе с MySQL
не должно Вас пугать. Последний отлично перекодирует данные налету, лишь бы
они были правильно написаны в таблице (т.е. совпадали с кодировкой таблицы).

Неактивен

 

#8 24.12.2010 21:20:58

KJIaBogaB
Участник
Зарегистрирован: 23.12.2010
Сообщений: 5

Re: mysql кодировка

paulus написал:

Это ошибка phpMyAdmin, к MySQL она имеет мало отношения. Возьмите любой
работающий клиент, и смотрите через него.

Но вообще говоря, сопоставление при работе phpMyAdmin при работе с MySQL
не должно Вас пугать. Последний отлично перекодирует данные налету, лишь бы
они были правильно написаны в таблице (т.е. совпадали с кодировкой таблицы).

А не подскажете мне (очень хочется) изменить кодировку по умолчанию на Мускул сервере?
У меня сейчас (как я уже говорил) MySQL-кодировка: UTF-8 Unicode (utf8)
А мне кровь из носу необходимо (по разному роду причин) сделать так, чтобы кодировка была стандартной виндовой ср1251.
Причины банальны:
1) Не зная как изменить кодировку на сервере - стыдно будет вообще писать программу под этот сервер smile
2) Наиболее часто используемая в РуНете (имхо) кодировка Windows СР1251 Cur.  Она поддерживает все нужные мне языки (русский и английский) - а этого лично мне за глаза, т.к. я больше 2 языков не планирую использовать вообще.
3) Хочется так же проверять PHPmyAdmin'ом всё то, что буду делать PHP кодом. Имхо наиболее популярный клиент. Всё бесплатно. Я диплом пишу и у меня все продукты для написания программы - бесплатные.
4) При переносе в тот же денвер или на другой аналогичный сервер моей базы данных боюсь столкнуться с граблями, которые сейчас у меня во лбу торчат и я как не пытаюсь - не могу их вытащить (видимо лоб деревянный) smile

Помогите пожалуста изменить кодировку сервера.
У меня просто подозрение, что переменные эти хранятся ещё где-то (помимо my.ini - возможно ещё и в реестре). Есть способы смены кодировки описаны очень красиво и доходчиво - но у меня тоже не работают:
http://www.tmanager.ru/russian/charset.html

И ещё я не понял - глюк ПХПмайАдмина в том, что он отображает кодировку сервера неправильно, или в том, что он в таблицах ??????? показывает?

Неактивен

 

#9 25.12.2010 18:05:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mysql кодировка

Отвечу, пожалуй, по Вашим пунктам.

1. Хорошо, что Вы это осознаете. Столько народу пишет программы, не разбираясь.
По принципу «и так сойдет».

2. Это было так лет 10 назад. Сейчас не поддерживать utf8 так же странно, как
использовать windows2000. Работать, конечно, будет, но есть же новые технологии.

3. Да, наиболее популярный, но это не делает его качественным, к сожалению.
Проверять в phpMyAdmin можно, но держите еще какой-то работающий клиент так,
чтобы ошибки phpMyAdmin не считать своими wink Особенно это касается поддержки
кодировок в нем. Потому что пункт 1.

4. Денвер обладает тем же преимуществом, что и phpMyAdmin — он легко запускается.
И теми же минусами — если что-то работает (или не работает) в денвере — ничего
не означает. У разработчиков денвера очень странный взгляд на жизнь. Лучше поставь-
те приложения вручную. Будет работать не хуже (обычно — лучше), но Вы будете
контролировать все настройки самостоятельно.

Кодировка сервера меняется через default-character-set. Важно понимать, что кодировки
бывают разные: кодировка сервера, кодировка базы данных, кодировка таблицы, коди-
ровка столбца, кодировка подключения. Если хотите сделать современное приложение,
лучше со стороны сервера держите всё в utf8. Если Вам действительно нужно получать
cp1251 со стороны клиента — просто после подключения выполните SET NAMES cp1251.
И всё. Не усложняйте себе жизнь.

Неактивен

 

#10 25.12.2010 23:52:45

KJIaBogaB
Участник
Зарегистрирован: 23.12.2010
Сообщений: 5

Re: mysql кодировка

Полагаю, если всё же кодировка UTF-8 у меня работала - под неё и надо делать !
Большое спасибо за советы !!!

PS:
Сегодня проверил свои таблицы в базе нормальным клиентом (MySQL Workbench 5.2.31 CE / Revision 7110) на предмет корректного отображения кодировки. Результат на экране smile
Сейчас качаю бесплатный EMS SQL Manager 2010 for MySQL - проверю им. Но скорее всего будет тоже самое.
Самое смешное, что броузер отображает верно мною написанную страницу на PHP - но при загрузке страницы кодировка ср1251.

Какой-то коварный глюк smile
Может переустановить "с нуля" сервер начиная с ОС win2003 ?

Отредактированно KJIaBogaB (28.12.2010 23:26:31)


Прикрепленные файлы:
Attachment Icon Work_Benck_mysql_encoding_utf8.jpg, Размер: 72,135 байт, Скачано: 760

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson