Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема отбражения русских символов
 
 автор: Mpak   (19.10.2006 в 20:59)   письмо автору
 
 

В MySQL в некоторые столбцы введены слова по русски, но их не отображает браузер
На запрос

<?php   
  $dblocation 
"localhost";   
  
$dbname "ompd";   
  
$dbuser "root";   
  
$dbpasswd "159753";   

  
$dbcnx mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx)   
  {   
    echo 
"<p>К сожалению, не доступен сервер mySQL</p>";   
    exit();   
  }   
  if (!
mysql_select_db($dbname,$dbcnx) )   
  {   
    echo 
"<p>К сожалению, не доступна база данных</p>";   
    exit();   
  }   
  
$user mysql_query("SELECT name from author");   
  if(!
$ver)   
  {   
    echo 
"<p>Ошибка в запросе</p>";   
    exit();   
  }   
  echo 
mysql_result($name0);   
?>



Выводит:

Ћ«мзЁЄ

   
 
 автор: KEPZ   (19.10.2006 в 22:23)   письмо автору
 
   для: Mpak   (19.10.2006 в 20:59)
 

у вас наверняка PHP 5.x и MySQL 4.x ...
тогда проблема в кодировке...
попробуйте поставить 'cp1251_general_ci'

   
 
 автор: Mpak   (19.10.2006 в 22:31)   письмо автору
 
   для: KEPZ   (19.10.2006 в 22:23)
 

А куда это поставить?

'cp1251_general_ci'

   
 
 автор: cheops   (19.10.2006 в 22:59)   письмо автору
 
   для: Mpak   (19.10.2006 в 20:59)
 

У вас текст и таблица какие кодировки имеют? Как заполняли базу данных из какого клиента?

   
 
 автор: Mpak   (20.10.2006 в 00:08)   письмо автору
 
   для: cheops   (19.10.2006 в 22:59)
 

MySQL Server 5.0
MySQL Command Line Client
Я не знаю как кодировку узнать...
Когда заполнял таблицу (в клиенте) вводил некоторые данные на русском языке.
Цифры отображает нормально...

   
 
 автор: cheops   (20.10.2006 в 12:43)   письмо автору
 
   для: Mpak   (20.10.2006 в 00:08)
 

Понятно, тексто у вас сейчас в кодировке cp866 (DOS), MySQL Command Line Client плохо приспособлена для работы в Windows, так как ей невозможно практически передать параметры. Обычно, когда работают с русским текстом при помощи консольных инструментов MySQL запускают командную строку (Пуск->Программы->Стандартные->Командная строка), переходят в каталог С:/mysql/bin, меняют кодировку консоли при помощи команды
chcp 1251

и запускают mysql.exe в ручную
mysql -u root

или если у пользователя root имеется пароль
mysql -u root -p

Далее настраивают кодировку соединения при помощи запроса
SET NAMES 'cp1251'

и вводят русский текст, при этом кодировка по умолчанию в таблицах MySQL должна быть в также cp1251, это можно проверить выполнив запрос
SHOW CREATE TABLE tbl

PS Возможно вам также будут интересны статьи
http://www.st-host.ru/article/?id_article=14
http://www.st-host.ru/article/?id_article=15

   
 
 автор: Mpak   (21.10.2006 в 13:41)   письмо автору
 
   для: cheops   (20.10.2006 в 12:43)
 

Не получается, при Ваших настройках MySQL не могу вводить русские символы он вводит какую-то гадость, и по умолчанию у меня кодировка latin1

   
 
 автор: cheops   (21.10.2006 в 13:48)   письмо автору
 
   для: Mpak   (21.10.2006 в 13:41)
 

Кодировку следует выставить cp1251, у вас в командной строке (в свойствах) какой шрифт стоит точечный или Lucida Console (следует выбрать последний).

   
 
 автор: Mpak   (21.10.2006 в 18:32)   письмо автору
 
   для: cheops   (21.10.2006 в 13:48)
 

В свойствах cmd установил Lucida Console
Першел в папочку

.../ mysql/mysql server 5.0/bin>

выставил кодировку chcp 1251
зашел в MySQL создал тестовую БД.
Лог то что писал далее:

mysql> create table q (
    -> win_name text character set cp1251
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into q values ('Кодировка Windows');
Query OK, 0 rows affected (0.03 sec)

mysql> select * from q;
+-------------------+
| win_name          |
+-------------------+
| Кодировка Windows |
+-------------------+
1 row in set (0.00 sec)

mysql> quit;
Bye


Содержание файла mysql_connect.php :

<?php 
  $dblocation 
"localhost";   
  
$dbname "qwer";   
  
$dbuser "root";   
  
$dbpasswd "";   

  
$dbcnx mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx)   
  {   
    echo 
"<p>К сожалению, не доступен сервер mySQL</p>";   
    exit();   
  }   
  if (!
mysql_select_db($dbname,$dbcnx) )   
  {   
    echo 
"<p>К сожалению, не доступна база данных</p>";   
    exit();   
  }   
  
$ver mysql_query("SELECT win_name from q");   
  if(!
$ver)   
  {   
    echo 
"<p>Ошибка в запросе</p>";   
    exit();   
  }
  @
mysql_query ("set names 'cp1251_general_ci'");
  echo 
mysql_result($ver0);   
?>

В браузере выдается:
????????? Windows

   
 
 автор: LuxeMate   (21.10.2006 в 19:43)   письмо автору
 
   для: Mpak   (21.10.2006 в 18:32)
 

2Mpak А как насчет хорошё подумать?

В этом вашем коде:

$ver = mysql_query("SELECT win_name from q");    
  if(!$ver)    
  {    
    echo "<p>Ошибка в запросе</p>";    
    exit();    
  } 
  @mysql_query ("set names 'cp1251_general_ci'"); 
  echo mysql_result($ver, 0);    


Вы сначало выполняете mysql_query("SELECT win_name from q");
а уже потом делаете @mysql_query ("set names 'cp1251_general_ci'");

а надо так:

<?php  
  $dblocation 
"localhost";    
  
$dbname "qwer";    
  
$dbuser "root";    
  
$dbpasswd "";    

  
$dbcnx mysql_connect($dblocation$dbuser$dbpasswd); 
  if (!
$dbcnx)    
  {    
    echo 
"<p>К сожалению, не доступен сервер mySQL</p>";    
    exit();    
  }    
  if (!
mysql_select_db($dbname,$dbcnx) )    
  {    
    echo 
"<p>К сожалению, не доступна база данных</p>";    
    exit();    
  }  
   @
mysql_query ("set names 'cp1251_general_ci'"); 
  
$ver mysql_query("SELECT win_name from q");    
  if(!
$ver)    
  {    
    echo 
"<p>Ошибка в запросе</p>";    
    exit();    
  } 

  echo 
mysql_result($ver0);    
?> 

   
 
 автор: Mpak   (21.10.2006 в 20:34)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 19:43)
 

К сожалению не помогает...:(

   
 
 автор: Mpak   (21.10.2006 в 20:42)   письмо автору
 
   для: Mpak   (21.10.2006 в 20:34)
 

,

   
 
 автор: Mpak   (21.10.2006 в 20:42)   письмо автору
 
   для: Mpak   (21.10.2006 в 20:34)
 

ЭЭЭЭ....
Из строчки

@mysql_query ("set names 'cp1251_general_ci'");

убрал _general_ci
Так что получилось:

@mysql_query ("set names 'cp1251'");


И Все получилось!!!

Спасибо LuxeMate , сheops, KEPZ, Trianon!!!!

Ждите качественно сайта :))))))))))))))))

   
 
 автор: Trianon   (21.10.2006 в 14:36)   письмо автору
 
   для: Mpak   (21.10.2006 в 13:41)
 

в кодировке latin1 никогда не было, нет, и не будет русских символов.

   
 
 автор: LuxeMate   (21.10.2006 в 14:55)   письмо автору
 
   для: Trianon   (21.10.2006 в 14:36)
 

У меня аналогичная проблемма,в БД всё выставил на cp_1251 ,но - у меня при записи русских символов пишет что слово слишком длинное,когда в нем 3 буквы а в эту строку можно все 100 запихать,а в браузер выводит только знаки вопроса,хотя кодировка сайта
Кирилица(Windows)...
В чем у меня проблемма?

   
 
 автор: LuxeMate   (21.10.2006 в 16:50)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 14:55)
 

Эм..ну так,никто не знает в чем фокус?

   
 
 автор: Trianon   (21.10.2006 в 16:54)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 16:50)
 

и SET NAMES '1251' выполняется при подключении?

   
 
 автор: LuxeMate   (21.10.2006 в 17:15)   письмо автору
 
   для: Trianon   (21.10.2006 в 16:54)
 

Нет,т.к незнаю что это за штука и с чем её едят...
Не могли бы вы пояснить как иправить этот фокус?

   
 
 автор: LuxeMate   (21.10.2006 в 19:09)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 17:15)
 

У меня только одна ошибка осталась,ввожу хоть 1 символ кирилицей,он мне сразу пишет что Data too long for column...
В чем дело??

   
 
 автор: Mpak   (21.10.2006 в 20:43)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 19:09)
 

ЭЭЭЭ....
Из строчки

@mysql_query ("set names 'cp1251_general_ci'");

убрал _general_ci
Так что получилось:

@mysql_query ("set names 'cp1251'");


И Все получилось!!!

Спасибо LuxeMate , сheops, KEPZ, Trianon!!!!

Ждите качественно сайта :))))))))))))))))

   
 
 автор: ddhvvn   (21.10.2006 в 21:53)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 19:09)
 

>У меня только одна ошибка осталась,ввожу хоть 1 символ кирилицей,он мне сразу пишет >что Data too long for column...
>В чем дело??


У меня та же проблема!
Что делать? Эксперементировать с кодировками?

   
 
 автор: st.Ass   (21.10.2006 в 21:57)   письмо автору
 
   для: ddhvvn   (21.10.2006 в 21:53)
 

Какой тип данных имеет эта самая колонка в бд?

   
 
 автор: st.Ass   (21.10.2006 в 22:01)   письмо автору
 
   для: ddhvvn   (21.10.2006 в 21:53)
 

Попробуйте сразу после подключения к базе выполнить.


<?
@mysql_query ("set names 'cp1251'"); 
?>

   
 
 автор: LuxeMate   (21.10.2006 в 22:30)   письмо автору
 
   для: st.Ass   (21.10.2006 в 22:01)
 

Хе...вот я решил попробовать в своей гостевой зарегать юзера с ником написаным кирилицей,и получил вот что


Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation '='Out of range value adjusted for column 'usr_id' at row 1


PS делал всё о чем сказано в это теме.
В чем же тогда проблемма?

   
 
 автор: st.Ass   (21.10.2006 в 22:32)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 22:30)
 

collations измените на cp1251_general_ci в бд при помощи пхпмайадмин

   
 
 автор: ddhvvn   (22.10.2006 в 09:54)   письмо автору
 
   для: st.Ass   (21.10.2006 в 22:01)
 

Мне вроде как помогло! :)

   
 
 автор: ddhvvn   (22.10.2006 в 10:22)   письмо автору
 
   для: ddhvvn   (22.10.2006 в 09:54)
 

Да не фига не помогло! В консоли кирилица выглядит как "??????", а при получении через скрипт вообще выдается предупреждение, что поле пусто!

   
 
 автор: cheops   (22.10.2006 в 12:11)   письмо автору
 
   для: ddhvvn   (22.10.2006 в 10:22)
 

Для того, чтобы не возникали знаки вопроса вместо русского текста, необходимо и в консоли в скрипте настраивать кодировку соединения
SET NAMES 'cp1251'

   
 
 автор: ddhvvn   (22.10.2006 в 20:22)   письмо автору
 
   для: cheops   (22.10.2006 в 12:11)
 

Слава богу! Я свою ошибку исправил. Все работает!

   
 
 автор: Mpak   (22.10.2006 в 12:16)   письмо автору
 
   для: ddhvvn   (22.10.2006 в 10:22)
 

Попробуй сделать так:
Зайди в MySQL через командную строку,
Зайди в свойства командной строки,
И измени шрифт с точечного на Lucida Console

Мне помогло.

   
 
 автор: LuxeMate   (22.10.2006 в 13:27)   письмо автору
 
   для: Mpak   (22.10.2006 в 12:16)
 

Тут что все пользуются командной строкой?

   
 
 автор: Mpak   (22.10.2006 в 14:25)   письмо автору
 
   для: LuxeMate   (22.10.2006 в 13:27)
 

угу:)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования