Решено: кривая кодировка в базе mysql (как дальше жить?)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

день добрый,

досталась в наследство mysql база. якобы в utf-8.
движок работает с ней прекрасно (на сайте буковки нормальные).
только вот базу надо перенести на другой хост, лезем в базу, а там все в таком виде:

Код: Выделить всё

пшо�то те�т
казалось бы cp1252 -> utf8 и делов то.
только вот при

Код: Выделить всё

cat dump.sql | iconv -c -f utf-8 -t cp1252
часть базы теряется по дороге и получается такой текст:

Код: Выделить всё

'Интере<D1>на<D1> и полезна<D1> информаци<D1>
а местами и вовсе теряются целые куски текста.
собственно вопрос, есть ли способ как то получить нормальную базу в utf?

причем переношу не только базу, но и cms. только вот на старом хосте (там шаред хостинг и настройки мне не доступны) все работает и с такой базой, а тут с такой базой работать не хочет. (хотя там и база utf8_general_ci и сопоставление utf8_general_ci и вообще все там utf8_general_ci) но базу все же хотелось бы сконвертировать.

update движок неправильно вставил вид того, что в базе.
вид полностью идентичен тому, что нарисован тут в секции UTF-8 -> Windows-1252.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: кривая кодировка в базе mysql

Сообщение KiWi »

Возьмите кусок дампа и прогоните через: http://www.artlebedev.ru/tools/decoder/
Тогда будет понятно откуда и куда кодировать.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

KiWi писал(а):
28.01.2011 03:26
Тогда будет понятно откуда и куда кодировать.
дык я пробовал. он говорит, что cp1252 -> utf-8, но декодирует с такими же пробелами и ошибками. (типа <D1> символов. еще и квадратики какие то на выходе получаются, плюс к <D1>).
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Решено: кривая кодировка в базе mysql

Сообщение rm_ »

SLEDopit
с бубном танцевать. :)
А почему cp1252, может попробовать 1251?
Сталкивался с подобным, уже не помню, как именно поправил.
Выложите куда-нибудь бинарно кусочек-пример текста, попробую вспомнить.

движок работает с ней прекрасно (на сайте буковки нормальные).

Погрепайте исходники движка на тему http://php.net/manual/en/function.mysql-set-charset.php
Чего он там выставляет.
Можно попробовать в скрипте, которым выгружаете базу (phpMyAdmin?) прописать команду на выставление такого же перед коннектом.
Получите тот самый прекрасный нормальный текст уже и в .sql-дампе.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

rm_ писал(а):
28.01.2011 08:55
А почему cp1252, может попробовать 1251?
из 1251 совсем ерунда получалась.

на самом деле все решилось гораздо проще:
под cms был найден компонент, который дампит базу. а так как cms с ней работает прекрасно, то и база получилась замечательной (все читаемо и в utf).
всем спасибо за советы.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: кривая кодировка в базе mysql

Сообщение KiWi »

SLEDopit писал(а):
28.01.2011 08:49
KiWi писал(а):
28.01.2011 03:26
Тогда будет понятно откуда и куда кодировать.
дык я пробовал. он говорит, что cp1252 -> utf-8, но декодирует с такими же пробелами и ошибками. (типа <D1> символов. еще и квадратики какие то на выходе получаются, плюс к <D1>).

И зачем тогда:
iconv -c -f utf-8 -t cp1252

То есть из UTF-8 в CP1252?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

KiWi писал(а):
28.01.2011 14:54
То есть из UTF-8 в CP1252?
дык получается, что текст представлен в utf, а исходная кодировка была cp1252. вот я так и пытаюсь вернуть. в любом случае, при iceonv наоборот ничего читаемого не получается в принципе. а так хоть часть слов была.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: кривая кодировка в базе mysql

Сообщение KiWi »

SLEDopit писал(а):
28.01.2011 17:54
KiWi писал(а):
28.01.2011 14:54
То есть из UTF-8 в CP1252?
дык получается, что текст представлен в utf, а исходная кодировка была cp1252. вот я так и пытаюсь вернуть. в любом случае, при iceonv наоборот ничего читаемого не получается в принципе. а так хоть часть слов была.

Декодер у Лебедева выдаёт ровно ту последовательности перекодировок, которая нужна для восстановления русского текста из исходного.
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Решено: кривая кодировка в базе mysql

Сообщение arkhnchul »

еще enca есть для определения, чего там к чему...

Код: Выделить всё

[arkhnchul@darkstar ~]# enca tmp1251_koi8_utf.txt
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from KOI8-R
[arkhnchul@darkstar ~]#

Losing is fun!
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

Изображение Изображение
arkhnchul писал(а):
28.01.2011 22:45
еще enca есть для определения, чего там к чему...

Код: Выделить всё

 $ grep "X-Wo" d*l | head -4 | LANG=ru_RU.UTF-8 enca
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from ISO-8859-5
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: кривая кодировка в базе mysql

Сообщение sash-kan »

Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: кривая кодировка в базе mysql

Сообщение SLEDopit »

sash-kan писал(а):
29.01.2011 14:23
SLEDopit
Декодер кодировок
да, спасибо, это работает (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Skyb
Сообщения: 967
ОС: RFremix 18

Re: Решено: кривая кодировка в базе mysql

Сообщение Skyb »

а стандартные средства перевода кодировок отменили? :)
C:\windows> ifconfig
"ifconfig" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: кривая кодировка в базе mysql

Сообщение sash-kan »

поискал на форуме и что-то не нашёл про alter table change to blob.
это когда столбец сначала в blob конвертируется, а затем в нужный тип (и с нужной кодировкой).
вот тут довольно пространное описание:
http://codex.wordpress.org/Converting_Data...ith_new_charset
наиболее ключевой момент:
alter table t1 change c1 c1 blob-тип;
alter table t1 change c1 c1 тип character set нужный;
соответствие blob-типа и нужного типа данных тоже процитирую:
CHAR ⇾ BINARY
TEXT ⇾ BLOB
TINYTEXT ⇾ TINYBLOB
MEDIUMTEXT ⇾ MEDIUMBLOB
LONGTEXT ⇾ LONGBLOB
VARCHAR ⇾ VARBINARY (надо указывать длину)

Skyb писал(а):
29.01.2011 19:51
а стандартные средства перевода кодировок отменили? :)
что есть стандартные средства перевода кодировок?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Решено: кривая кодировка в базе mysql

Сообщение arkhnchul »

SLEDopit
не понял. сначала enca-ой смотреть, потом перекодировать
Losing is fun!
Спасибо сказали: