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

Форум MySQL

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

 

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

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

тема: Вывод русских символов из MySQL
 
 автор: x][x   (18.11.2006 в 23:27)   письмо автору
 
 

У меня такая проблема нужно чтоб в базе был русский текст, но при выводе вот что выходит

имя = џаЁЄ
E-mail = s.ya.n@mail.ru
about = kz «п «п

я читал темы на форуме но чтото не чего не понял.
помогите позжалуста.

   
 
 автор: ihoru   (19.11.2006 в 01:14)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 

У меня по началу тоже была эта проблема, а узнал решение тоже тут, на форуме:

<?
if (!mysql_query("SET NAMES 'cp1251'")) 
    die(
'Невозможно поменять кодировку в Базе Данных');
?>

этот код вставьте сразу после подключения и выделения Базы данных!

   
 
 автор: x][x   (19.11.2006 в 11:24)   письмо автору
 
   для: ihoru   (19.11.2006 в 01:14)
 

Если я вставляю эту строчку вот что получается

имя = ????
E-mail = s.ya.n@mail.ru
about = kz «? «?

Я так понял кодировка поменялась но толку ).

   
 
 автор: cheops   (19.11.2006 в 12:20)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 

У вас текст в базе данных в кодировке cp866 (DOS), вероятно вы набирали его в консоли, для того, чтобы текст был в кодировке cp1251 (Windows) перед работой в консоли необходимо выполнить команду
chcp 1251

которая изменит текущую кодировку.

   
 
 автор: x][x   (19.11.2006 в 13:19)   письмо автору
 
   для: cheops   (19.11.2006 в 12:20)
 

я набирал базу в MySQL Command Line Client, в my.ini я изменил строку

default-character-set=ital1

на

default-character-set=cp1251

на рнр странице после подключения к базе данных вставил строку

mysql_query("SET NAMES 'cp1251'"

но всеравно не помогает, пишет ???? за место русского текста. если я в поле (в MySQL) для ввода русского текста ставлю принудительно cp1251, тогда при вводе русского текста он пишет что слишком большой размер строки (хотя строка состоит лишь из 1 символа).

   
 
 автор: cheops   (19.11.2006 в 18:26)   письмо автору
 
   для: x][x   (19.11.2006 в 13:19)
 

Нет, следует запускать mysql отдельно предварительно выполнив команду chcp 1251. MySQL Command Line Client не позволит выполнить другую команду. Следует запускать mysql через командную строку (Пуск -> Программы -> Стандартные -> Командная строка).

   
 
 автор: Giga   (20.11.2006 в 02:08)   письмо автору
 
   для: cheops   (19.11.2006 в 18:26)
 

А как быть если необходима utf-8? Тоже замучала кодировка. Она конечно выводиться в виде текста на экран и вполне читаема ну это как в редакторе P' а на экране а. Но мне желательно дальше обработать эти данные например с base_64 а здесь ждут глюки. Данные из базы коверкаются самым не вообразимым способом. Как можно обработать utf до ввода или после ввода в базу с cp1251.

   
 
 автор: x][x   (20.11.2006 в 14:03)   письмо автору
 
   для: cheops   (19.11.2006 в 18:26)
 

При входе в MySQL через командную строку пишется Enter password: (как MySQL Command Line Client) я ввожу пороль но он пишет что не верная база данных, а если ввожу chcp 1251 русский текст превращается в иероглифы.

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
C:\Documents and Settings\Roman.TECH>cd C:\Program Files\MySQL\MySQL Server 5.0\
bin
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -u root -p 1
Enter password: *
ERROR 1049 (42000): Unknown database '1'
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -u root -p 1

Но когда я пишу за место пороля имя базы данных он выдает

Enter password: ***
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
ES)
C:\Program Files\MySQL\MySQL Server 5.0\bin>

   
 
 автор: Trianon   (20.11.2006 в 14:16)   письмо автору
 
   для: x][x   (20.11.2006 в 14:03)
 

Судя по числу звездочек, имя БД у Вас как раз из трех букв. Вот его и нужно писать вместо единицы после -p . А когда спрашивают пароль , нужно писать пароль.

   
 
 автор: x][x   (20.11.2006 в 18:03)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 

Теперь при выводе данных вместо русских букв ?????? вот код

<?php
$dblocation
="localhost";
$dbuser="root";
$dbpasw="1";
$lin=mysql_connect($dblocation$dbuser,$dbpasw);
    if( !
$lin ) die( mysql_error() );
    if (!
mysql_select_db(exe$lin));
mysql_query("SET NAMES 'cp1251'");  
$ath=mysql_query("select * from exe2;");
if (
$ath)
{
$aq=mysql_fetch_array($ath);
echo 
"имя = ".$aq['name']."<br>";
}
?>

При назначении Типа кодирования вот что получается:

exe4  | CREATE TABLE `exe4` (
  `name` text character set cp1251
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

1 row in set (0.00 sec)
mysql> insert into exe4 values ('??????? Hi');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql>
Я так понял все дело в том что вот здесь

DEFAULT CHARSET=latin1 
стоит latin1 как это можно изменить?

   
 
 автор: x][x   (20.11.2006 в 23:21)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 

Я тут почитал одну тему http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=26385&page=8 по этой же проблеме,
так вот делаю все что там написано и когда я заполняю колонку русскими символами вот что он выдает:

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

mysql> insert into q values ('Кодировка Windows');
ERROR 1406 (22001): Data too long for column 'win_name' at row 1
mysql>

Позжалуйста объясните из-за чего это происходит?

   
 
 автор: cheops   (20.11.2006 в 23:52)   письмо автору
 
   для: x][x   (20.11.2006 в 23:21)
 

У вас не настроена (или настроена неправильна) кодировка сервера MySQL - приведите пожалуйста содержимое файла my.ini.

   
 
 автор: x][x   (20.11.2006 в 23:54)   письмо автору
 
   для: cheops   (20.11.2006 в 23:52)
 

Вот он

   
 
 автор: cheops   (21.11.2006 в 11:53)   письмо автору
 
   для: x][x   (20.11.2006 в 23:54)
 

Уберите директиву
default-character-set=latin1

из секции [mysql]

   
 
 автор: x][x   (21.11.2006 в 19:24)   письмо автору
 
   для: cheops   (21.11.2006 в 11:53)
 

Всеравно пишет

Data too long for column 'name' at row 1
,
в чем же может быть проблема?
А такие проблемы с русским языком во всех версиях MySQL?

   
 
 автор: x][x   (21.11.2006 в 19:48)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 


mysql> create database exe;
Query OK, 1 row affected (0.03 sec)

mysql> use exe;
Database changed
mysql> create table exe (name text character set cp1251);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into exe values ('Кодировка Windows');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> show create table exe;
+-------+-----------------------------------------------------------------------
----+
| Table | Create Table
    |
+-------+-----------------------------------------------------------------------
----+
| exe   | CREATE TABLE `exe` (
  `name` text
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 |
+-------+-----------------------------------------------------------------------
----+
1 row in set (0.00 sec)

mysql>

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

   
 
 автор: Trianon   (21.11.2006 в 20:02)   письмо автору
 
   для: x][x   (21.11.2006 в 19:48)
 

Почему Вы думаете, что с консоли вводите данные в 1251?
По умолчанию консольная кодировка - cp866. И Вы её вроде как решили не менять....

   
 
 автор: x][x   (21.11.2006 в 20:26)   письмо автору
 
   для: Trianon   (21.11.2006 в 20:02)
 

не я до этого кода ввожу chcp 1251.

   
 
 автор: Trianon   (21.11.2006 в 20:41)   письмо автору
 
   для: x][x   (21.11.2006 в 20:26)
 

и SET NAMES 'cp1251' тоже вводите каждый раз?

   
 
 автор: x][x   (21.11.2006 в 22:32)   письмо автору
 
   для: Trianon   (21.11.2006 в 20:41)
 

А где это вводить, при создании БД? Если да то где именно, подскажите позжалуста.

   
 
 автор: x][x   (22.11.2006 в 17:34)   письмо автору
 
   для: x][x   (18.11.2006 в 23:27)
 

Все я разобрался, проблема была в том, что когда создавал базу не писал

SET NAMES 'cp1251'

ВСЕ ОГРОМНОЕ СПАСИБО.

   
Rambler's Top100
вверх

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