Кирилические БД в разных кодировках на одном mysql сервере.

Buldozer

Новичок
Кирилические БД в разных кодировках на одном mysql сервере.

Возникла необходимость перенести сайт(mysql БД в cp1251) на новый сервер, после переезда все кирилические символы отображаются как "????".

прописал в my.cnf

[client]
default-character-set=cp1251

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

[mysql]
default-character-set=cp1251

[mysqldump]
default-character-set=cp1251

В результате кирилица для нового сайта отображается правильно, а кирилица для старого сайта(как оказалось latin1) как "????".

Либо туда, либо сюда. Подскажите как можно грамотно разрулить эту ситуацию?

-~{}~ 09.11.06 03:35:

Вернее, вопрос: - "можно на ходу сменить кодировку с latin на cp1251?".

mysql 4.1.20
 

MiRacLe

просто Чудо
1. простой способ - после коннекта к базе сделать запрос - SET NAMES latin1;

2. длинный путь - ALTER DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
для каждой таблицы ALTER TABLE `table_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci; и соответственно на все "текстовые" поля так же менять кодировку.
 

Buldozer

Новичок
Первый вариант не подходит, потому что нужно это сделать "по тихому" и прозрачно для владельцев базы в latin1.
Второй вариант не очень реален, потому что таблиц там тьма... правда тут наверное можно скрипт написать.

Нашел статью где предлагают экспортировать и импортировать базу, и что якобы после этого она встанет в нормальном чарсете.
Пробовал это, но такая проблема, что c --default-character-set=cp1251 она экспортирует все кириллические символы в ????. Поэтому приходится экспортировать в latin1... так она нормально экспортируется, при импорте база успешно заливается и кодировка везде определяется как cp1251, но уже в самом мускле вместо кириллицы оказываются опять таки ????.
Походу дела нужно сам дамп перекодировать, пробовал через
iconv -f latin1 -t cp1251 fulldt.sql
но он почему-то матюгается
iconv: fulldt.sql: cannot convert
 

magic

lancer
Возникла необходимость перенести сайт(mysql БД в cp1251) на новый сервер, после переезда все кирилические символы отображаются как "????".
Какая версия MySQK была? <4.1?
прописал в my.cnf
не нужно этого делать.
1. простой способ - после коннекта к базе сделать запрос - SET NAMES latin1;
бред
2. длинный путь
А если у него немеряно таблиц и полей? :)

Если осуществляется переход с MySQL 3.x/4.0 то делаем обычный SQL дамп, убираем из дампа принудительное указание charset и импортируем дамп в 4.1. That's all.
 

Buldozer

Новичок
на всех серверах mysql 4.1.20

делаем обычный SQL дамп, убираем из дампа принудительное указание charset и импортируем дамп в 4.1. That's all.
если это сделать в "дефолтном" варианте, то заливаемая кирилица бьется в "????".

если внести изменения в my.cnf, то все нормально заливается, но существующая база в latin1 начинает выдвавать "????".

у тебя 5-я, то я просто ставил SET NAMES cp1251. Помогало.
это и в 4-й помогает, но мне такой вариант не подходит.
 
Сверху