1

Тема: Знаки вопроса вместо русских символов.

Здравствуйте уважаемые. У меня проблемка при выводе браузером данных из БД, вместо русских символов отображаются -"?". Изначально подумал что это происходит из-за проблем с импортом\экспортом (сделал дамп с удаленного сервера и импортирую на локалку, которую только что установил)
Но потом, добавил запись на русском языке через phpmyadmin и все теже знаки вопроса, кстати в pma отображается все правильно.
конфигурация:
mysql-4.1.16-win32
php-5.2.1-Win32
phpMyAdmin-2.11.9.5-all-languages  (на удаленном сервере стоит phpMyAdmin-2.11.9.4, поэтому выбрал наиболее приближенную версию).
Подскажите пожалуйста где менять настройки в php.ini, my.ini, или еще где? И самое главное что менять?

Заранее спасибо.

ЗЫ. на локалке в pma есть сообщение:
Версия клиентской библиотеки MySQL (5.0.22) отличается от версии установленного MySQL-сервера (4.1.16). Это может привести к некорректной работе.
Не здесь ли собака покопалась????

2

Re: Знаки вопроса вместо русских символов.

jeck111 пишет:

Не здесь ли собака покопалась????

Различие версий настораживает. К сожалению утвердительно говорить, что это причина, я не могу.

Если в phpMyAdmin на удаленном и локальном сервере кириллица выглядит читаемо - значит проблема не столь трудна.
Выполните в phpMyAdmin на обоих серверах запрос и покажите вывод:
SHOW GLOBAL VARIABLES LIKE 'char%';

В какой кодировке страницы сайта?
В какой кодировке таблицы в БД?

ВКонтакте Facebook Twitter

3

Re: Знаки вопроса вместо русских символов.

сделал запрос, и показываю вывод:
на локалке:

Variable_name                      Value
character_set_client         latin1
character_set_connection    latin1
character_set_database         latin1
character_set_results         latin1
character_set_server         latin1
character_set_system         utf8
character_sets_dir         C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/

на удаленном сервере:

Variable_name                     Value
character_set_client        cp1251
character_set_connection   cp1251
character_set_database        cp1251
character_set_filesystem        binary
character_set_results       cp1251
character_set_server       cp1251
character_set_system        utf8
character_sets_dir        /usr/local/share/mysql/charsets/

вижу что совпадений почти нет, и сразу вопрос где это можно поменять?

В какой кодировке страницы сайта?

charset=windows-1251

В какой кодировке таблицы в БД?

Вот здесь я не уверен что правильно понимаю о чем Вы спрашиваете, поэтому пишу все:
Таблицы:   тип: MyISAM    сравнение: cp1251_general_ci
и вот это на домашней странице pma:
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: UTF-8_Unicode_ci

4

Re: Знаки вопроса вместо русских символов.

jeck111
На локальном сервере в конфигурационном файле MySQL (my.ini) внесите следующие изменения:

[mysql]
default-character-set=cp1251
[mysqld]
init-connect="SET NAMES cp1251"
default-character-set=cp1251

ВКонтакте Facebook Twitter

5

Re: Знаки вопроса вместо русских символов.

сделал, перезапустил mysql, apache (на всякий случай), результата не дало, все теже знаки вопроса. sad

6

Re: Знаки вопроса вместо русских символов.

Что выдает запрос?
SHOW GLOBAL VARIABLES LIKE 'char%';

ВКонтакте Facebook Twitter

7

Re: Знаки вопроса вместо русских символов.

на  localhost:

Variable_name     Value
character_set_client               cp1251
character_set_connection          cp1251
character_set_database              cp1251
character_set_results              cp1251
character_set_server              cp1251
character_set_system              utf8
character_sets_dir              C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/

8

Re: Знаки вопроса вместо русских символов.

еще заметил одно различие между локалкой и удаленным:

Таблица     Действие     Записи     Тип         Сравнение                Размер        Фрагментировано
локал:
Таблиц: 10     Всего                 370    InnoDB        cp1251_general_ci    208.9 КБ    0 Байт
удаленный:
Таблиц: 10     Всего              370    MyISAM        cp1251_general_ci    234.3 КБ    3.0 КБ

это нижняя строка, которая жирным выделена в закладке "Структура", хотя напротив самих таблиц и там и там стоит MyISAM

ЗЫ. Просто подумал, может это будет полезно.

9

Re: Знаки вопроса вместо русских символов.

jeck111
Если вместо данных выводятся вопросики - значит в БД данные не должны быть в читаемом виде. Еще раз: в phpMyAdmin вы должны видеть кириллицу, а не вопросики или крякозябы, как на удаленном, так и на локальном сервере.

Нижняя строка означает изначальный тип создаваемых таблиц. Если вы хотите, чтобы и на локальном сервере все создаваемые таблицы имели тип MyISAM, поправьте в my.ini строку:

[mysqld]
default-storage-engine=MYISAM

В данном случае, это не существенно, так как импортируемый дамп имеет прописанную кодировку для каждой таблицы.

ВКонтакте Facebook Twitter

10

Re: Знаки вопроса вместо русских символов.

Спасибо за содействие, вопрос решен:
после коннекта к базе, и перед всеми запросами вставил код:

mysql_query("SET NAMES 'cp1251'");

Возможно вопрос был задан не на том форуме, ну все равно спасибо Hanut за помощь.

11

Re: Знаки вопроса вместо русских символов.

Добрый день. У меня похожая проблема такчто не хочу создавать отдельный топик.
После обновления движка DLE вся кирилица стала отображатся знаками вопросов, при чем как в самой бд так и на сайте. Пробовал менять кодировку через пма на cp1251_general_ci, вроде отображается что все поменялось но при просмотре данных всеравно "????"
Уже даже не знаю что еще пробовать....

SHOW GLOBAL VARIABLES LIKE 'char%

character_set_client    latin1
character_set_connection    latin1
character_set_database    latin1
character_set_filesystem    binary
character_set_results    latin1
character_set_server    latin1
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/

12

Re: Знаки вопроса вместо русских символов.

mayerz
Посмотрите как кириллица выглядит в phpMyAdmin, если там будут вопросики, то данные уже не вернуть, если крякозябы, то надо сделать дамп и попробовать его перекодировать. Если будете заниматься перекодировкой, то создайте отдельную ветку для обсуждения, постараемся помочь.

Менять сравнение на таблицах в phpMyAdmin не надо.

ВКонтакте Facebook Twitter

13

Re: Знаки вопроса вместо русских символов.

Теперь и у меня такая же проблема.... Вставлял в my.ini такие строки:
init-connect="SET NAMES utf8"
default-character-set=utf8
Но такое ощущение, что это вообще не влияет, т.к. при запросе SHOW GLOBAL VARIABLES LIKE 'char%';
character_set_client     latin1                   
character_set_connection latin1                   
character_set_database    latin1                   
character_set_results     latin1                   
character_set_server      latin1                   
character_set_system      utf8                     
character_sets_dir        C:\MySQL\share\charsets/

Причём при проверке кодировки базы данных(show variables like "character_set_database";), и таблицы(show create table `table`) выводит: utf8
ENGINE=MyISAM DEFAULT CHARSET=utf8
И кодировка каждого поля тоже utf8_unicode_ci
Вот... не знаю в чём проблема... перекодировать базу данных мне не надо, мне надо создать таблицу, и вставлять в неё поля на кириллице, но этого не получается, в браузере пишет вопросы, а в PMA всё нормально отображается.
Да, в PMA кодировки все стоят utf8_unicode_ci.

Отредактировано Feniksss (2009-11-27 09:10:12)

14

Re: Знаки вопроса вместо русских символов.

Feniksss
Вы все правильно сделали, только скрипты (кроме phpMyAdmin) нельзя подключать под root, для них создайте отдельного пользователя и назначьте ему только необходимые права (не выставляйте права из раздела "Администрирование").

Покажите ваш my.ini, возможно где-то ошибка. SHOW GLOBAL VARIABLES LIKE 'char%'; должен выводить utf8.

ВКонтакте Facebook Twitter

15

Re: Знаки вопроса вместо русских символов.

Вот мой my.ini
[spoiler]
# MySQL Server Instance Configuration File
# ----------------------------------------------------------------------
# CLIENT SECTION
# ----------------------------------------------------------------------
#
[client]

port=3306

# Добавьте эту строку и проверьте путь к файлам описания кодировок.
character-sets-dir="C:/MySQL/share/charsets"

# SERVER SECTION
# ----------------------------------------------------------------------
#
[mysqld]

# Здесь тоже.
character-sets-dir="C:/MySQL/share/charsets"

init-connect="SET NAMES utf8"

port=3306

basedir="C:/MySQL/"

datadir="C:/MySQL/Data/"

default-character-set=utf8

default-storage-engine=INNODB

max_connections=100

query_cache_size=0

table_cache=256

tmp_table_size=5M

thread_cache_size=8

#*** MyISAM Specific options

myisam_max_sort_file_size=100G

myisam_max_extra_sort_file_size=100G

myisam_sort_buffer_size=8M

key_buffer_size=8M

read_buffer_size=64K
read_rnd_buffer_size=256K

sort_buffer_size=212K


#*** INNODB Specific options ***
innodb_data_home_dir="E:/MySQL Datafiles/"

innodb_additional_mem_pool_size=2M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=1M

innodb_buffer_pool_size=8M

innodb_log_file_size=10M

innodb_thread_concurrency=8
[/spoiler]

Есть ещё одно НО: я для проверки вообще удалил my.ini из директории с Mysql. И сервер всё равно запустился. Как это может быть? Т.е. получается он использует какой-то другой файл конфигурации??? Но при поиске на всём жёстком диске других my.ini и my.cnf найдено не было...

Отредактировано Hanut (2009-11-27 15:24:47)

16

Re: Знаки вопроса вместо русских символов.

Feniksss пишет:

Т.е. получается он использует какой-то другой файл конфигурации?

Нет, он использует настройки по умолчанию, которые прописаны в самой программе.

Конфигурационный файл my.ini считывается из каталога прописанного в директиве basedir.

ВКонтакте Facebook Twitter

17

Re: Знаки вопроса вместо русских символов.

Результат тот же:
Variable_name     Value
character_set_client     latin1
character_set_connection     latin1
character_set_database     latin1
character_set_results     latin1
character_set_server     latin1
character_set_system     utf8
character_sets_dir     C:\MySQL\share\charsets/

Может я не правильно запускаю сервер?
NET START mysql(mysqld-nt.exe mysql)(в качестве службы потом висит)
NET STOP mysql

18

Re: Знаки вопроса вместо русских символов.

Странная ситуация. mysqld-nt.exe - такой программы у меня нет вовсе.

Посмотрите как служба запускается. У меня прописано следующее:
"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini" MySQL

ВКонтакте Facebook Twitter

19

Re: Знаки вопроса вместо русских символов.

Создал новую службу, запускающую mysqld.exe со строкой параметров --defaults-file="C:\MySQL\my.ini"
Выводит: Ошибка 1067: Процесс был неожиданно завершен
Не знаете в чём проблема может быть?:) Др. серверов не запущено(mysql). И файл my.ini лежит в этой директории...
Причём без строки параметров --defaults-file="C:\MySQL\my.ini" запускается, но SHOW GLOBAL VARIABLES LIKE 'char%'; выдаёт то же smile

Отредактировано Feniksss (2009-11-27 21:12:50)

20

Re: Знаки вопроса вместо русских символов.

Хм... теперь я вообще ничего не пойму... не подключалось из-за ошибки в my.ini(это я в .err глянул, и исправил).
Теперь SHOW GLOBAL VARIABLES LIKE 'char%'; выдаёт:
Variable_name     Value
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_results     utf8
character_set_server     utf8
character_set_system     utf8
character_sets_dir     C:/MySQL/share/charsets
Т.е. всё должно быть замечательно... но не тут-то было. В браузере отображаются вопросы(кодировка браузера utf8), и также, когда я запускаю сервис mysql через командную строку и создаю запрос обычный Select * from test.
В полях также отображены вопросы! Но в PMA всё отображается отлично...
Что за...

Ещё кое-что заметил)))
При добавлении в базу через командную строку,а не через PMA добавляет и отображает на русском! Если через PMA, то всё описано выше)

Отредактировано Feniksss (2009-11-27 21:43:20)

21

Re: Знаки вопроса вместо русских символов.

Feniksss
Скрипт запускается под root? Если да, то создайте отдельного пользователя, как я описал выше.

ВКонтакте Facebook Twitter

22

Re: Знаки вопроса вместо русских символов.

и под другим пользователем, и под root результат один.

23

Re: Знаки вопроса вместо русских символов.

Feniksss
Возможно проблема в скрипте и он сам выставляет кодировку соединения с MySQL. Можно либо поискать соответствующую директиву в его настройках, либо попробовать установить самому. Сразу после функции mysql_connect добавить строку:

mysql_query('SET NAMES utf8');

ВКонтакте Facebook Twitter

24

Re: Знаки вопроса вместо русских символов.

ну так а в чём проблема когда я через командную строку вывожу?(Select * from 'test')
Без скриптов всяких...

Отредактировано Feniksss (2009-11-28 22:09:57)

25

Re: Знаки вопроса вместо русских символов.

Feniksss
Если не было никаких предварительных настроек, то кодировка консоли будет DOS (cp866). Данные в консоли лучше не вбивать и не редактировать, так как utf8 в ней не выводится.

То, как вы видите данные в phpMyAdmin - это то, как они на самом деле хранятся в БД. Если вы видите кириллицу, значит с данными у вас все нормально и проблема где-то еще.

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

ВКонтакте Facebook Twitter