forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 07.09.2017, 08:20
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Victor Sudakov написал(а) к All в Sep 17 10:51:06 по местному времени:

Dear All,

"less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы вполне читаемый текст в UTF-8. А вот сдампить эту базу корректно никак не могу. Пробовал:

mysqldump --default-character-set=utf8 -r /var/tmp/test.sql ask1 wpcomments
mysqldump --default-character-set=latin1 -r /var/tmp/test.sql ask1 wpcomments

внутри /var/tmp/test.sql получается бнопня. Правда разная бнопня в зависимости от значения ключа default-character-set.

Вот это и аналогичные статье уже прочитал: https://makandracards.com/makandra/5...utf-8-safe-way
ничего не помогает.

Посоветуйте что-нибудь умное pls.

mysql-server-4.1.25, надо с него перетащить данные на более новый.

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #2  
Старый 07.09.2017, 09:20
Sergey Anohin
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Sergey Anohin написал(а) к Victor Sudakov в Sep 17 08:14:32 по местному времени:

Нello, Victor!

VS> "less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы вполне читаемый текст в UTF-8. А вот сдампить эту базу корректно никак не могу. Пробовал:
VS> mysqldump --default-character-set=utf8 -r /var/tmp/test.sql ask1 wpcomments
VS> mysqldump --default-character-set=latin1 -r /var/tmp/test.sql ask_1
VS> внутри /var/tmp/test.sql получается бнопня. Правда разная бнопня в зависимости от значения ключа default-character-
VS> Вот это и аналогичные статье уже прочитал: https://makandracards.com/makandra/5...utf-8-safe-way
VS> ничего не помогает.
VS> Посоветуйте что-нибудь умное
VS> mysql-server-4.1.25, надо с него перетащить данные на более новый.
VS> Victor Sudakov, VAS4-RIPE, VAS47-RIPN

А локаль кодировка? Наверно что нить надо мудрить cat dump.sql | iconv и в таком плане

С наилучшими пожеланиями, Sergey Anohin.

--- wfido
Ответить с цитированием
  #3  
Старый 07.09.2017, 09:20
Sergey Anohin
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Sergey Anohin написал(а) к Victor Sudakov в Sep 17 08:14:45 по местному времени:

Нello, Victor!

VS> "less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы вполне читаемый текст в UTF-8. А вот сдампить эту базу корректно никак не могу. Пробовал:
VS> mysqldump --default-character-set=utf8 -r /var/tmp/test.sql ask1 wpcomments
VS> mysqldump --default-character-set=latin1 -r /var/tmp/test.sql ask_1
VS> внутри /var/tmp/test.sql получается бнопня. Правда разная бнопня в зависимости от значения ключа default-character-
VS> Вот это и аналогичные статье уже прочитал: https://makandracards.com/makandra/5...utf-8-safe-way
VS> ничего не помогает.
VS> Посоветуйте что-нибудь умное
VS> mysql-server-4.1.25, надо с него перетащить данные на более новый.
VS> Victor Sudakov, VAS4-RIPE, VAS47-RIPN

А локаль кодировка? Наверно что нить надо мудрить cat dump.sql | iconv и в таком плане

С наилучшими пожеланиями, Sergey Anohin.

--- wfido
Ответить с цитированием
  #4  
Старый 07.09.2017, 10:30
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Victor Sudakov написал(а) к Sergey Anohin в Sep 17 13:08:04 по местному времени:

Dear Sergey,

07 Sep 17 08:14, you wrote to me:

VS>> "less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри
VS>> таблицы вполне читаемый текст в UTF-8. А вот сдампить эту базу
VS>> корректно никак не могу. Пробовал: mysqldump
VS>> --default-character-set=utf8 -r /var/tmp/test.sql ask_1
VS>> wp_comments mysqldump --default-character-set=latin1 -r
VS>> /var/tmp/test.sql ask_1 внутри /var/tmp/test.sql получается
VS>> бнопня. Правда разная бнопня в зависимости от значения ключа
VS>> default-character- Вот это и аналогичные статье уже прочитал:
VS>> https://makandracards.com/makandra/5...importing-from
VS>> -to-mysql-in-an-utf-8-safe-way ничего не помогает. Посоветуйте
VS>> что-нибудь умное mysql-server-4.1.25, надо с него перетащить
VS>> данные на более новый.

SA> А локаль кодировка?

Как я уже отметил выше, под этой самой локалью ru_RU.UTF-8, команда
"less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы вполне читаемый текст в UTF-8.

Куда еще мудрить?

SA> Наверно что нить надо мудрить cat dump.sql | iconv
SA> и в таком плане

dump.sql содержит не_ _то_ _же_ _самое, что MYD файл. iconv вообще не понимает содержимое (cannot convert), мне не удалось подобрать исходную кодировку, чтобы iconv не ругался.

Поэтому задача-минимум - получить то_ _же_ _самое, что физически лежит в базе.

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #5  
Старый 07.09.2017, 11:20
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Victor Sudakov написал(а) к All в Sep 17 14:06:42 по местному времени:

Dear Victor,

07 Sep 17 08:14, Sergey Anohin wrote to me:

SA> А локаль кодировка?

От локали явно никак не зависит:

$ env LANG=C mysqldump --default-character-set=latin1 -r /var/tmp/test1.sql ask1 wpcomments ; md5 /var/tmp/test1.sql
MD5 (/var/tmp/test1.sql) = 25e9fc61030fcabca200cb693baf67f2

$ env LANG=ruRU.UTF-8 mysqldump --default-character-set=latin1 -r /var/tmp/test1.sql ask_1 wpcomments ; md5 /var/tmp/test1.sql
MD5 (/var/tmp/test1.sql) = 25e9fc61030fcabca200cb693baf67f2

$ env LANG=ruRU.CP1251 mysqldump --default-character-set=latin1 -r /var/tmp/test1.sql ask_1 wpcomments ; md5 /var/tmp/test1.sql
MD5 (/var/tmp/test1.sql) = 25e9fc61030fcabca200cb693baf67f2


Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #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)
Ответить с цитированием
  #7  
Старый 07.09.2017, 17:00
Andrey Ostanovsky
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Andrey Ostanovsky написал(а) к Victor Sudakov в Sep 17 15:45:58 по местному времени:

Нello Victor!

07 Sep 17 13:08, you wrote to Sergey Anohin:

VS> Как я уже отметил выше, под этой самой локалью ru_RU.UTF-8, команда
VS> "less /var/db/mysql/ask1/wpcomments.MYD" показывает внутри таблицы
VS> вполне читаемый текст в UTF-8.
VS> Куда еще мудрить?

А требуется именно "мудрить" или проще будет выгрузить без перекодировки "как есть"?

Andrey

--- GoldED+/BSD 1.1.5-b20070503
Ответить с цитированием
  #8  
Старый 07.09.2017, 20:50
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

Victor Sudakov написал(а) к Andrey Ostanovsky в Sep 17 23:31:32 по местному времени:

Dear Andrey,

07 Sep 17 15:45, you wrote to me:

VS>> Как я уже отметил выше, под этой самой локалью ru_RU.UTF-8,
VS>> команда "less /var/db/mysql/ask1/wpcomments.MYD" показывает
VS>> внутри таблицы вполне читаемый текст в UTF-8. Куда еще мудрить?

AO> А требуется именно "мудрить" или проще будет выгрузить без
AO> перекодировки "как есть"?

Вот если знаешь простой способ выгрузить без перекодировки "как есть", то рассказывай.

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #9  
Старый 08.09.2017, 07:10
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

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

Dear Eugene,

07 Sep 17 16:02, you wrote to me:

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

Странно, что разработчику пофиг, что это может привести к проблемам в приложении, из-за неправильного collation.

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

Так и есть в моем случае. Просто у меня было мнение (как объяснили на канале #freebsd, ошибочное), что mysqldump должен сливать сырые данные, как они есть в базе. А оказывается он смотрит на клиентскую кодировку и пытается данные перекодировать из кодировки, указанной для таблицы, в кодировку клиента (из .my.cnf или аналогичного места). Это был ключевой момент в понимании, что же собственно происходит.

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

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

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

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

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

Так и сделал в конечном итоге.

IMНO более правильно было бы наличие у mysqldump ключа "ничего не перекодировать, слить как есть", но такого ключа не нашлось.

С помощью --default-character-set можно примерно этого добиться, но если не дай Бог в разных таблицах/базах оказались разные "SET CНARSET", то получается геморрой.


Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #10  
Старый 08.09.2017, 12:40
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию mysqldump и кодировка

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

Dear Eugene,

07 Sep 17 16:02, you wrote to me:

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

EG> Их легко поменять в my.cnf,

А ты не знаешь, указание на кодировку в my.cnf в секции [client] влияет как-то на PНP-клиенты:
databases/php56-{mysql,mysqli,pdo_mysql}? И если да, то в какой конфиг они смотрят?

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 23:11. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot