kvirtu 315 Опубликовано: 2011-12-05 14:57:59 Share Опубликовано: 2011-12-05 14:57:59 Столкнулся с проблемой. Никак не могу переконвертировать базу мускуля из latin1 в utf8. Что делал: 1. mysqldump base1 > old.sql (в дампе стоит: SET NAMES latin1) 2. iconv -f latin1 -t UTF-8 old.sql > new.sql 3. mysql base1 < new.sql Если обращаться к базе с кодировкой utf8 - получаю крякозабры. Спасибо. Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-05 15:08:15 Share Опубліковано: 2011-12-05 15:08:15 latin1 - не кириллическая кодировка. То, что в ней хранится тест в 1251 - горе того, кто создавал базу. И именно поэтому поиск/сортировка по кириллическому тексту работает весьма загадочно. Исходя из этого - нужно сделать следующее: 1) сдампить базу, с выводом дампа в latin1 (--default-character-set=latin1) 2) заменить везде latin1 на нужную кодировку (утф8) через sed 3) залить мускулом, указав --default-character-set=cp1251 Как-то так, если память не подводит. Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2011-12-05 15:12:29 Share Опубліковано: 2011-12-05 15:12:29 SET NAMES CP1251 Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-05 15:16:46 Автор Share Опубліковано: 2011-12-05 15:16:46 latin1 - не кириллическая кодировка. То, что в ней хранится тест в 1251 - горе того, кто создавал базу. И именно поэтому поиск/сортировка по кириллическому тексту работает весьма загадочно. Исходя из этого - нужно сделать следующее: 1) сдампить базу, с выводом дампа в latin1 (--default-character-set=latin1) 2) заменить везде latin1 на нужную кодировку (утф8) через sed 3) залить мускулом, указав --default-character-set=cp1251 Как-то так, если память не подводит. база создалась в далеком 2044 году, когда еще совсем плохо разбирался во всем .... iconv -f latin1 -t UTF-8 | sed -e 's/ CHARSET=latin1/ CHARSET=UTF-8/g' > new.sql - так ? SET NAMES CP1251 это в new.sql менять руцями ? Ссылка на сообщение Поделиться на других сайтах
KaYot 3 707 Опубліковано: 2011-12-05 15:18:41 Share Опубліковано: 2011-12-05 15:18:41 база создалась в далеком 2044 году Я умер? о_О Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-05 15:22:10 Автор Share Опубліковано: 2011-12-05 15:22:10 база создалась в далеком 2044 году Я умер? о_О Опечатка 2004, в то время создался сервак, и только менялось железо по мере необходимости, но тут надо менять кодировку и ипец .... Ссылка на сообщение Поделиться на других сайтах
adeep 212 Опубліковано: 2011-12-05 15:58:21 Share Опубліковано: 2011-12-05 15:58:21 Все на самом деле тривиально, но на удачу: 1. надо любым доступным методом (перебирая set names или без оного) вытянуть базу в cp1251. 2. сконвертить ее в utf-8 3. вставить в начало sql файла команду UTF-8 4. заливать обратно не под рутом, а под отдельным пользователем (была глюкофича, что под рутом изменения кодировок не работали, не знаю пофиксили уже или нет) Ссылка на сообщение Поделиться на других сайтах
Foster 0 Опубліковано: 2011-12-05 16:20:29 Share Опубліковано: 2011-12-05 16:20:29 помнится такая база была у UTM четвертых, третьих версий... на вскидку из базы UTM табличка users: mysqldump --default-character-set=latin1 UTM users -p | iconv -c -f cp1251 -t utf8 выведет на экран читаемые символы, если конечно консоль и мускуль утфные это можно всё в файлик, в нем еще и таблички поправить (поменять latin1 на utf8) и залить назад если база большая можно побить файликами, потом сконвертить, склеить и залить в мускуль Разбить и склеить, я имею в виду split, cat (построчно). Все это делается не выходя с консоли, а то как-то видел как себе базы скачивали и пытались открывать текстовыми редакторами.... Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-05 17:36:02 Share Опубліковано: 2011-12-05 17:36:02 Все это делается не выходя с консоли, а то как-то видел как себе базы скачивали и пытались открывать текстовыми редакторами.... Печально, когда админы не догадываются о существовании sed... iconv не обязательно - указание --default-character-set для mysql делает свое дело вместо него, а ресурсов тратится меньше. Ссылка на сообщение Поделиться на других сайтах
Elisium 10 Опубліковано: 2011-12-05 19:46:38 Share Опубліковано: 2011-12-05 19:46:38 iconv не обязательно - указание --default-character-set для mysql делает свое дело вместо него, а ресурсов тратится меньше. default-character-set не делает конвертацию. Вспомнил, где видел похожую задачу: http://forum.nodeny.com.ua/index.php?topic=172.0 Там, кстати, есть пару интересных ссылок. Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-05 19:47:51 Автор Share Опубліковано: 2011-12-05 19:47:51 Это база для Билинга Abills (базу в 2004 ставил по мануалу биллига) Недавно разработчик перевел новые версии биллинга полностью на utf8, а скрипт конвертации не дает для свободного использования .... Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-05 19:49:20 Автор Share Опубліковано: 2011-12-05 19:49:20 iconv не обязательно - указание --default-character-set для mysql делает свое дело вместо него, а ресурсов тратится меньше. default-character-set не делает конвертацию. Вспомнил, где видел похожую задачу: http://forum.nodeny....php?topic=172.0 Там, кстати, есть пару интересных ссылок. Спасибо , попробую) Ссылка на сообщение Поделиться на других сайтах
jack 25 Опубліковано: 2011-12-06 08:42:36 Share Опубліковано: 2011-12-06 08:42:36 такая же беда =( iconv не обязательно - указание --default-character-set для mysql делает свое дело вместо него, а ресурсов тратится меньше. default-character-set не делает конвертацию. Вспомнил, где видел похожую задачу: http://forum.nodeny....php?topic=172.0 Там, кстати, есть пару интересных ссылок. Спасибо , попробую) как успехи? Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-06 10:01:21 Share Опубліковано: 2011-12-06 10:01:21 default-character-set не делает конвертацию. Он указывает, в какой кодировке входной файл (если в файле не указана кодировка явно). Что собссно эквивалентно вызову iconv Кстати, открою секрет: кодировка дампа совсем не обязательно должна совпадать с кодировкой данных, хранимых в таблицах Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 10:02:20 Автор Share Опубліковано: 2011-12-06 10:02:20 такая же беда =( iconv не обязательно - указание --default-character-set для mysql делает свое дело вместо него, а ресурсов тратится меньше. default-character-set не делает конвертацию. Вспомнил, где видел похожую задачу: http://forum.nodeny....php?topic=172.0 Там, кстати, есть пару интересных ссылок. Спасибо , попробую) как успехи? пока никак (((, после выполнения iconv -c -f cp1251 ( пробывал latin1 ) -t UTF-8 old.sql > new.sql и заливки new.sql в базу, не принимает пароль админа. Значит конвертация происходит не правильно .... В самой freebsd есть кодировка UTF-8 , а в мускуле utf8. Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 10:04:23 Автор Share Опубліковано: 2011-12-06 10:04:23 default-character-set не делает конвертацию. Он указывает, в какой кодировке входной файл (если в файле не указана кодировка явно). Что собссно эквивалентно вызову iconv Кстати, открою секрет: кодировка дампа совсем не обязательно должна совпадать с кодировкой данных, хранимых в таблицах ну делал так: mysqldump default-character-set=latin1 base > old.sql mysql default-character-set=utf8 base < old.sql не помогло и как писал:NiTr0 выходит ситуация, что база находится в кодировке latin1 , данные фактически в windows-1251 .. Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-06 10:14:25 Share Опубліковано: 2011-12-06 10:14:25 пока никак (((, после выполнения iconv -c -f cp1251 ( пробывал latin1 ) -t UTF-8 old.sql > new.sql и заливки new.sql в базу, не принимает пароль админа. Значит конвертация происходит не правильно .... В самой freebsd есть кодировка UTF-8 , а в мускуле utf8. Ессно. ну делал так: mysqldump default-character-set=latin1 base > old.sql mysql default-character-set=utf8 base < old.sql не помогло Ессно. Нужно sed'ом сменить latin1 на utf8, посмотреть на предмет отсутствия указания кодировки в шапке, и заливать, указав кодировку cp1251 (в которой реально хранятся данные). Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 10:22:05 Автор Share Опубліковано: 2011-12-06 10:22:05 пока никак (((, после выполнения iconv -c -f cp1251 ( пробывал latin1 ) -t UTF-8 old.sql > new.sql и заливки new.sql в базу, не принимает пароль админа. Значит конвертация происходит не правильно .... В самой freebsd есть кодировка UTF-8 , а в мускуле utf8. Ессно. ну делал так: mysqldump default-character-set=latin1 base > old.sql mysql default-character-set=utf8 base < old.sql не помогло Ессно. Нужно sed'ом сменить latin1 на utf8, посмотреть на предмет отсутствия указания кодировки в шапке, и заливать, указав кодировку cp1251 (в которой реально хранятся данные). iconv -f latin1 -t utf8 | sed -e 's/ CHARSET=windows-1251/ CHARSET=utf8/g' old.sql > new.sql - так ? Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-06 11:02:17 Share Опубліковано: 2011-12-06 11:02:17 Нет. 1) в дампе БД charset будет latin1, collation - latin1_general_ci. Накой вы windows-1251 пытаеетесь менять на что-то (которого там вообще не может быть, ибо чарсет, даже если и есть, зваться будет cp1251)? 2)iconv испохабит блобы, что вы сами на себе уже проверили Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 11:10:26 Автор Share Опубліковано: 2011-12-06 11:10:26 Нет. 1) в дампе БД charset будет latin1, collation - latin1_general_ci. Накой вы windows-1251 пытаеетесь менять на что-то (которого там вообще не может быть, ибо чарсет, даже если и есть, зваться будет cp1251)? 2)iconv испохабит блобы, что вы сами на себе уже проверили 1. в дампе: set names и default sharset стоит кодировка latin1. 2. так а как без iconv перекодировать ??? Ссылка на сообщение Поделиться на других сайтах
jack 25 Опубліковано: 2011-12-06 11:44:58 Share Опубліковано: 2011-12-06 11:44:58 кто поможет, вышлю пива =) Ссылка на сообщение Поделиться на других сайтах
NiTr0 584 Опубліковано: 2011-12-06 13:20:44 Share Опубліковано: 2011-12-06 13:20:44 1. в дампе: set names и default sharset стоит кодировка latin1. names - указать cp1251 (в нем у вас данные в дампе), charset/collation - менять на utf8, если хотите хранить данные в БД в utf8. 2. так а как без iconv перекодировать ??? Если бы у вас база была в cp1251, для конвертации вам не нужно было бы даже дамп сливать в общем-то Повторяюсь, кодировка дампа и кодировка данных в таблице - 2 разных вещи, которые никоим образом не связаны. Ссылка на сообщение Поделиться на других сайтах
PBNM 0 Опубліковано: 2011-12-06 14:31:11 Share Опубліковано: 2011-12-06 14:31:11 У меня была почти аналогичная проблема - mysql был в latin1 база в koi8, а надо было перевести в win1251. Долго намучался с этой проблемой ... Решил ее с помощью внешнего php скрипта - с одной базы считывал, а в другую (на дугой сервер) записывал. Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 14:38:21 Автор Share Опубліковано: 2011-12-06 14:38:21 У меня была почти аналогичная проблема - mysql был в latin1 база в koi8, а надо было перевести в win1251. Долго намучался с этой проблемой ... Решил ее с помощью внешнего php скрипта - с одной базы считывал, а в другую (на дугой сервер) записывал. а можно код скриптика ? Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2011-12-06 14:56:17 Автор Share Опубліковано: 2011-12-06 14:56:17 у меня база сейчас в кодировке utf8 а таблицы в latin1_swedish_ci .... . теперь надо данные таблиц перекодировать в utf8 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас