Показать сообщение отдельно
  #6  
Старый 07.09.2017, 13:30
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: mysqldump и кодировка

Eugene Grosbein написал(а) к Victor Sudakov в Sep 17 16:02:17 по местному времени:

07 сент. 2017, четверг, в 09:51 NOVT, Victor Sudakov написал(а):

VS> "less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы вполне
VS> читаемый текст в UTF-8. А вот сдампить эту базу корректно никак не могу.
VS> Пробовал:
VS> mysqldump --default-character-set=utf8 -r /var/tmp/test.sql ask1 wpcomments
VS> mysqldump --default-character-set=latin1 -r /var/tmp/test.sql ask1 wpcomments
VS> внутри /var/tmp/test.sql получается бнопня. Правда разная бнопня в зависимости
VS> от значения ключа default-character-set.

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

В итоге данные лежат фактически в одной кодировке, а MySQL думает,
что в другой. Вот это "думает" можно достаточно легко увидеть,
как и системные дефолты:

mysql> show variables like 'char%';
mysql> show variables like 'collation%';

Их легко поменять в my.cnf, но это не повлияет на "уже кривые" таблицы.
Для их починки гарантированно работает такой путь:

1) При помощи show table status \G и/или show create table/mysqldump
выяснить, что думает MySQL о кодировке данных. Затем снова сдампить
данные при помощи:

mysqldump --create-options --skip-set-charset --default-character-set=latin1,
где вместо latin1 подставить кодировку, которая приписана к данным в
таблицах - таким образом, получим дамп без перекодированных данных (бнопни),
но с неправильной кодировкой в CREATE TABLE, которую затем меняем
тупо sed-ом в дампе. И не забыв поправить в my.cnf дефолты сервера,
заливаем дамп обратно.

Eugene
--- slrn/1.0.2 (FreeBSD)
Ответить с цитированием