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

Форум MySQL

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

 

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

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

тема: кодировка в MySQL,работа в командной строке
 
 автор: ESBoy   (11.09.2008 в 16:23)   письмо автору
 
 

первое:

D:\Documents and Settings\Администратор>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20 to server version: 4.1.16-max

второе: то что говорили везде про chcp 1251, он мне ниче не дал

третье:
проделал пример со st-hosting:

create database test;

use test;

CREATE TABLE test ( 
  dos_name TEXT CHARACTER SET cp866, 
  win_name TEXT CHARACTER SET cp1251, 
  koi8r_name TEXT CHARACTER SET koi8r, 
  utf8_name TEXT CHARACTER SET utf8
);

вбил данные:

insert into test values ('абвгде','абвгде','абвгде','абвгде');

получил результат

mysql> select * from test; 
+---------------+---------------+-----------------+---------------+ 
| dos_name | win_name | koi8r_name | utf8_name |
+---------------+---------------+-----------------+---------------+ 
|   а?????     |    а???д?   |     а?????     |    абвгде     |
+---------------+---------------+-----------------+---------------+ 
1 row in set (0.00 sec)
mysql>


ну а почему win_name(cp1251) глючит???

p.s. to ronin80 : почти все посты форума просмотрел, ничего в идеале не найдено

  Ответить  
 
 автор: Trianon   (11.09.2008 в 16:39)   письмо автору
 
   для: ESBoy   (11.09.2008 в 16:23)
 

chcp 1251 нужно делать до запуска клиента mysql (этим настраивается консоль, а вовсе не сервер или соединение с БД)
После выбора бд нужно исполнить запрос
SET CHARACTER SET 'cp1251';

  Ответить  
 
 автор: ESBoy   (11.09.2008 в 18:29)   письмо автору
 
   для: Trianon   (11.09.2008 в 16:39)
 

упссссс..............ура!!!!!!!
спасиб Trianon !!!!!!!!

короче надо везде вписать cp1251

и при создании таблиц, и при внесении данных .....
все ясно теперь!!!!!!

еще раз спасиб!!!!!

  Ответить  
 
 автор: ESBoy   (11.09.2008 в 19:00)   письмо автору
 
   для: ESBoy   (11.09.2008 в 18:29)
 

вот полученный результат :)))

mysql> set names 'cp1251';
Query OK, 0 rows affected (0.02 sec)

mysql> select * from test;
+----------+----------+------------+-----------+
| dos_name | win_name | koi8r_name | utf8_name |
+----------+----------+------------+-----------+
| а?????   | а???д?   | а?????     | а???д?    |
| а?????   | а???д?   | а?????     | а???д?    |
+----------+----------+------------+-----------+
2 rows in set (0.00 sec)

mysql> insert into test values
    -> ('абвгде','абвгде','абвгде','абвгде');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> select * from test;
+----------+----------+------------+-----------+
| dos_name | win_name | koi8r_name | utf8_name |
+----------+----------+------------+-----------+
| а?????   | а???д?   | а?????     | а???д?    |
| а?????   | а???д?   | а?????     | а???д?    |
| абв???   | абвгде   | а?????     | абвгде    |
+----------+----------+------------+-----------+
3 rows in set (0.00 sec)

  Ответить  
 
 автор: Trianon   (11.09.2008 в 20:12)   письмо автору
 
   для: ESBoy   (11.09.2008 в 19:00)
 

Вот это очень показательный пример, когда из-за криво заданной кодировки БД и порочного по своей сути запроса SET NAMES получается кривой результат, внешне смахивающий на положительный .

  Ответить  
 
 автор: ESBoy   (11.09.2008 в 20:28)   письмо автору
 
   для: Trianon   (11.09.2008 в 20:12)
 

эээээ, еще одна проблемка

я добавляю данные через файл, например 4.sql
Z:\usr\local\mysql5\bin>mysql -u root<f:/4.sql


в самом файле:


use test;
set names 'cp1251';
insert into test values('абвгдейка','абвгдейка','абвгдейка','абвгдейка');


получаю


mysql> select * from test;
+-----------+-----------+-------------+-----------+
| dos_name  | win_name  | tkoi8r_name | utf8_name |
+-----------+-----------+-------------+-----------+
| абв???    | абвгде    | а?????      | абвгде    |
| рстуфхщър | рстуфхщър | рстуфхщър   | рстуфхщър |
+-----------+-----------+-------------+-----------+
2 rows in set (0.00 sec)


получается что "абвгдейка" в кодировке 866( DOS ) будет "рстуфхщър"
(проверен с помощью браузера)

в чем может быть проблема?

  Ответить  
 
 автор: ronin80   (11.09.2008 в 20:52)   письмо автору
 
   для: ESBoy   (11.09.2008 в 20:28)
 

у меня дело обстоит так:

1. в my.ini в секции [mysqld] прописано default-character-set=cp1251

2. все таблицы создаются с таким параметром CHARSET=cp1251

3. создание дампа производистя с такими параметрами --character-sets-dir="C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\" --default-character-set=cp1251

соответственно в дампе получаются такие строки

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `central` /*!40100 DEFAULT CHARACTER SET cp1251 */;

/*!40101 SET NAMES cp1251 */;

DROP TABLE IF EXISTS `act_do`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = cp1251;
CREATE TABLE `act_do` (
`ADO_ID` double NOT NULL auto_increment,
`DATE` date NOT NULL,
`TYPE` char(1) NOT NULL default 'D',
`SOST` tinyint(4) NOT NULL default '0',
`MASSA` float(10,2) default '0.00',
`KOLVO` float default '0',
PRIMARY KEY (`ADO_ID`),
KEY `ADO_IDX` (`ADO_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=cp1251;
SET character_set_client = @saved_cs_client;

ну и впринципе вроде всё, проблем с кодировкой не было

вот пример:

mysql> CREATE TABLE `test` (
-> `NAME` varchar(20)
-> ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Query OK, 0 rows affected (0.19 sec)

mysql> SET NAMES cp1251;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> insert into test values('абвгдейка');
Query OK, 1 row affected (0.03 sec)

mysql> insert into test values('абвгдейка');
Query OK, 1 row affected (0.05 sec)

mysql> insert into test values('абвгдейка');
Query OK, 1 row affected (0.06 sec)

mysql> insert into test values('абвгдейка');
Query OK, 1 row affected (0.06 sec)

mysql> select * from test;
+-----------+
| NAME |
+-----------+
| абвгдейка |
| абвгдейка |
| абвгдейка |
| абвгдейка |
+-----------+
4 rows in set (0.00 sec)

mysql>

  Ответить  
 
 автор: ESBoy   (11.09.2008 в 21:00)   письмо автору
 
   для: ronin80   (11.09.2008 в 20:52)
 

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

попробуй с файла залить

  Ответить  
 
 автор: ronin80   (12.09.2008 в 05:55)   письмо автору
 
   для: ESBoy   (11.09.2008 в 21:00)
 

давай файл, попробую

  Ответить  
 
 автор: ESBoy   (12.09.2008 в 14:16)   письмо автору
 
   для: ronin80   (12.09.2008 в 05:55)
 

я имею в виду вот так:
например файл 4.sql
 ...>mysql -u root<f:/4.sql 


в самом файле просто команды:


use test; 
set names 'cp1251'; 
insert into test values('абвгдейка','абвгдейка','абвгдейка','абвгдейка');

  Ответить  
 
 автор: ronin80   (12.09.2008 в 14:52)   письмо автору
 
   для: ESBoy   (12.09.2008 в 14:16)
 

я ж описал как я выбрасываю дамп (что в нём получается), импорт обратно проходит нормально

  Ответить  
 
 автор: ESBoy   (12.09.2008 в 15:02)   письмо автору
 
   для: ronin80   (12.09.2008 в 14:52)
 

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

а что например если у меня тысячи строк в текстовом файле...

  Ответить  
 
 автор: ronin80   (12.09.2008 в 15:16)   письмо автору
 
   для: ESBoy   (12.09.2008 в 15:02)
 

а что показывает show variables like '%character%';
и show create database имя_базы

  Ответить  
 
 автор: ESBoy   (12.09.2008 в 15:31)   письмо автору
 
   для: ronin80   (12.09.2008 в 15:16)
 


mysql> show variables like '%character%';
+--------------------------+-----------------------------------+
| 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       | \usr\local\mysql5\share\charsets\ |
+--------------------------+-----------------------------------+
7 rows in set (0.00 sec)

mysql> show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET cp1251 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

  Ответить  
 
 автор: ronin80   (12.09.2008 в 15:44)   письмо автору
 
   для: ESBoy   (12.09.2008 в 15:31)
 

попробуйте ещё указать параметры импорта

--character-sets-dir="путь_к _папке_charsets" --default-character-set=cp1251

  Ответить  
 
 автор: ESBoy   (12.09.2008 в 15:54)   письмо автору
 
   для: ronin80   (12.09.2008 в 15:44)
 

в смысле вот так ?!?:

mysql> --character-sets-dir="\usr\local\mysql5\share\charsets\";
mysql> --default-character-set=cp1251;
mysql> show variables like '%character%';
+--------------------------+-----------------------------------+
| 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       | \usr\local\mysql5\share\charsets\ |
+--------------------------+-----------------------------------+
7 rows in set (0.00 sec)

  Ответить  
 
 автор: ronin80   (12.09.2008 в 15:58)   письмо автору
 
   для: ESBoy   (12.09.2008 в 15:54)
 

в смысле вот так

...>mysql -u root --character-sets-dir="\usr\local\mysql5\share\charsets\" --default-character-set=cp1251 < f:/4.sql

  Ответить  
 
 автор: ESBoy   (12.09.2008 в 16:18)   письмо автору
 
   для: ronin80   (12.09.2008 в 15:58)
 

выводит ошибку:


Z:\usr\local\mysql5\bin>mysql -u root --character-sets-dir="\usr\local\mysql5\sh
are\charsets\" --default-character-set=cp1251<f:/4.sql
mysql: Character set 'cp1251' is not a compiled character set and is not specifi
ed in the '\usr\local\mysql5\share\charsets" --default-character-set=cp1251\Inde
x.xml' file

  Ответить  
 
 автор: Sergeich   (12.09.2008 в 17:46)   письмо автору
 
   для: ESBoy   (12.09.2008 в 16:18)
 

А чем Вас не устраивает кодировка utf-8? Зачем такая привязанность к ср1251?

  Ответить  
 
 автор: ESBoy   (13.09.2008 в 00:27)   письмо автору
 
   для: Sergeich   (12.09.2008 в 17:46)
 

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

ronin80, вопрос остается вопросом, ждемс.........

  Ответить  
 
 автор: ronin80   (13.09.2008 в 09:31)   письмо автору
 
   для: ESBoy   (13.09.2008 в 00:27)
 

в файле конфигурации сервера надо закомментировать в секции [mysql] параметр default-character-set=cp1251 и вставить его в [mysqld]

  Ответить  
 
 автор: ESBoy   (14.09.2008 в 12:07)   письмо автору
 
   для: ronin80   (13.09.2008 в 09:31)
 

а там да и так так стоит как ты говоришь

  Ответить  
Rambler's Top100
вверх

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