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

Форум MySQL

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

 

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

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

тема: вместо 'абвгд' -> 'рстуф'
 
 автор: btr   (19.02.2012 в 19:11)   письмо автору
 
 

Здравствуйте.
проблема:
при записи данных кириллицей (через клиент mysql.exe с помощью конструкции
load data infile) в поле типа text вместо 'абвгд' -> 'рстуф'

запись с помощью update нормально проходит.....
что-то я совсем ничего не понимаю, помогите пожалуйста.

  Ответить  
 
 автор: cheops   (20.02.2012 в 11:06)   письмо автору
 
   для: btr   (19.02.2012 в 19:11)
 

В какой кодировке данные в файле и в какой кодировке таблица MySQL?

  Ответить  
 
 автор: btr   (20.02.2012 в 13:27)   письмо автору
 
   для: cheops   (20.02.2012 в 11:06)
 

ANSI и cp1251. и забавно так, пишешь 'гдеж' получаешь 'фхцч' , а английские буквы не смещаются по алфавиту

  Ответить  
 
 автор: cheops   (20.02.2012 в 13:54)   письмо автору
 
   для: btr   (20.02.2012 в 13:27)
 

>ANSI и cp1251. и забавно так, пишешь 'гдеж' получаешь 'фхцч' , а английские буквы не смещаются по алфавиту
Дело в том, что командная строка в Windows имеет по умолчанию кодировку cp866, поэтому нужно либо сразу после соединения выполнять запрос
SET NAMES cp866
либо, если хотите работать именно в кодировке Windows1251, нужно запустить командную строку, сменить кодировку при помощи команды chcp
chcp 1251
тогда сразу после установки соединения с сервером нужно выполнять команду
SET NAMES cp1251

  Ответить  
 
 автор: btr   (20.02.2012 в 13:58)   письмо автору
 
   для: cheops   (20.02.2012 в 13:54)
 

Спасибо, сейчас попробую. Кстати, чувствую что это както связано, я в настройках конф файла в секции клиент поставил следующие директивы:
character-sets-dir="Z:/usr/local/mysql/share/charsets/"
default-character-set=cp1251
как это повлияло на мою проблему и не аналогия ли это предложенной Вами команде
chcp 1251

  Ответить  
 
 автор: cheops   (20.02.2012 в 14:01)   письмо автору
 
   для: btr   (20.02.2012 в 13:58)
 

Нет, консоль, будет всегда иметь кодировку 866, настройкой my.ini этого не исправить (возможно в операционной системе, реестре это где-то настраивается).

  Ответить  
 
 автор: btr   (20.02.2012 в 14:14)   письмо автору
 
   для: cheops   (20.02.2012 в 14:01)
 

Значит так.
1 открыл комстроку, ввел chcp1251 (комстрока вывела 'козяблики ' :1251) ((Текущая кодовая страница: 1251))
2 запустил mysql
3 SET NAMES cp1251; Query OK, 0 rows affected (0.03 sec)
4 просматриваю содержимое с помощью select. Вижу все равно вместо 'абвгд' 'рстуф'
4.1 (но при попытке скопировать это 'рстуф' из окна комстроки сюда из буфера выпало всежтаки 'абвгд' )

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

и по поводу конф файла, правильно ли я сделал или в будущем напорюсь на подводный камень какой-нибудь?

  Ответить  
 
 автор: cheops   (20.02.2012 в 14:26)   письмо автору
 
   для: btr   (20.02.2012 в 14:14)
 

chcp - это команда (change code page), после неё необходимо добавить пробел
chcp 1251
Чтобы проверить текущую кодировку просто выполните эту команду без параметров
chcp
в ответ она выдаст вам номер кодировки (866 или 1251).

  Ответить  
 
 автор: btr   (20.02.2012 в 14:38)   письмо автору
 
   для: cheops   (20.02.2012 в 14:26)
 

ну я так и делал, здесь писал - ошибся.

Значит так.
написал SET NAMES cp866;
все сразу стало показываться как надо.

Огромное спасибо за помощь.

еще два вопроса, если можно:
1 в Вашей книге (mysql5) написано, что поле типа SET может принимать сразу несколько значений из списка, как их можно в это поле вставить при загрузке из файла?

2 есть ли возможность при запуске клиента подгружать некий командный файл с несколькими операциями (создать базу, выбрать базу, создать таблицу, загрузить данные из файла)?

  Ответить  
 
 автор: cheops   (20.02.2012 в 18:11)   письмо автору
 
   для: btr   (20.02.2012 в 14:38)
 

1. В кавычках, через запятую, т.е. если у вас скажем поле имеет тип SET('fst', 'snd', 'thd'), то значения для этого поля должны выглядеть так 'fst, snd, thd' или так 'fst, thd'.
2. По-моему нет, что-то не могу припомнить, но вы можете использовать команду SOURCE, которая выполняет SQL-запросы из заранее подготовленного файла (чтобы не возиться с путями можно положить его в каталог bin).

PS Под новые вопросы лучше заводить новые темы.

  Ответить  
 
 автор: btr   (20.02.2012 в 18:43)   письмо автору
 
   для: cheops   (20.02.2012 в 18:11)
 

Спасибо за науку. Вот действительно, смотришь в книгу - видишь фигу :( два раза на эту страницу смотрел

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

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