Pull to refresh

Comments 23

Спасибо. Завтра на свежую голову попробую. Так как есть база которую уже давно нужно переместить на сервер с utf8, пробывал через iconv, ничего толкового не получилось. Надеюсь это поможет.
PhpMyAdmin или другая программа. Алгоритм такой — делаешь dump базы в plain/text, как-будто ты хочешь перенести БД на другой хостинг (или просто такой корявый BackUP). Дальше DROP таблиц/БД/создание параллельно ещё одной БД (нужное подчеркнуть). Изменяешь кодировку в файлах и выполняешь на сервере.

Операция занимает в лучшем случае пару минут, если умеешь пользоваться автоматической заменой текста. По крайней мере когда-то я так делал. Исключения составляют ситуации, когда база ОЧЕНЬ БОЛЬШАЯ и её нельзя прекратить её работу на некоторое время, и то я думаю можно как-нибудь решить этот вопрос.
Мне просто кажется этот метод более оптимальным по отношению ко времени. А так очень полезный скрипт. :)

P.S. Быть может даже стоит написать GUI к нему…
а не будет проблем с базами больших размеров? точно не ляжет phpMyAdmin? ;)
Мне кажется, что пока ты дождешься открытия файла с дампом, чтобы там изменить кодировку таблиц - ты состариться успеешь.
В моем случае база не маленькая. В районе 5 гигов.
Да и не забывайте, что часть народа трудится на "гавнохостингах", и не везде можно делать `CREATE DATABASE`.
А если в проекте больше 10 таблиц, то копипаст и изменение DEFAULT CHARSET в описании таблицы оч. быстро надоест.

Я не притендую на уникальность идеи, скрипт написал для облегчения жизни себе и, возможно, другим.
Извини конечно, но БД в 5 гигов на «говнохостингах» не держат, а на своём нет проблем с консолью для администратора БД.

Копировать я и не собирался. Просто заменить одну кодировку на другую стандартными функциями текстового редактора.

Скажем так — «серьёзные проекты» проще сразу доверить хорошему архитектору (администратору БД) на проектирование, чем потом заниматься таким… Возможно стоит выпустить новую версию проекта, как мы уже ждём какой месяц подряд новый хабр (это так, от нашего огорода в некоторый другой булдыжничек)

Я не хочу спорить до состояния «брызганья слюной со скоростью поросячего визга», а просто предлагаю спросить у администраторов БД — как лучше решить данную задачу?
Зачем drop - просто export (с заменой таблиц). Потом в любом редакторе конвертишь в utf-8 (я напримр php expert editor-ом). Потом import - 3 минуты и готово.
Я так всегда делал... проблем не было ни с одним сервером.
Да кстати, можно и скриптом... но dump базы все же сохранишь. :) (на всякий случай)
Когда база большая и скорость канала маленькая - лучше конечно скриптом.
Да ну вас всех! <a href=""htt">CAST уже отминили? Или в офф документация вы не искали?
А мне казалось, что уже все перешли на UTF-8 и 1251 в прошлом. // возможно ошибаюсь.
Сам лично все начал переводить на "утф", когда обновились сервера mysql с 4.0 до 4.1 — тогда в сети просто "кишили" вопросы:как поднять кодировку и в какую переводить?
НУ как видишь, кто-то еще нет ;)
как ни странно встречаются базы создатели которых совсем не беспокоились о кодировке. и базы совсем не маленькие
Пример из MySQL 5.0 Reference Manual.
CONVERT:
INSERT INTO utf8table (utf8column)
SELECT CONVERT(latin1field USING utf8) FROM latin1table;
CAST:
INSERT INTO utf8table (utf8column)
SELECT CAST(latin1field AS CHAR CHARACTER SET utf8) FROM latin1table;

Via: http://dev.mysql.com/doc/refman/5.0/en/c…
А если у тебя 50 таблиц, в которых по несколько текстовых полей. Будешь ручками все это набирать?
А тут просто скрипт запустить и не париться. Точнее, логин, пароль и т.д. придется прописать.

Если бы нужно было конвертнуть 1 поле, я бы точно так и сделал.
Кстати, и проблему с буквой е = ё это не решает.
При такой конвертации на уникальном поле валилась ошибка Duplicate entry key. На словах "веселый" и "весёлый"
а что мешает сделать из пхп листинг таблиц и с помощью все того же пхп для каждой конвертнуть таким образом? :)
Не надо превращать хабр в помойку скриптов. Либо суть рассказали бы и ссылку на dpaste дали, либо вообще не надо нам скриптопомоек.
Спасибо за критику. Написал алгоритм.
Спасибо конечно, но у меня всё давно в юникоде.
Не в тему, но может кому поможет. Сам провозился однажды.
Как перевести базу в кодировку cp1251 если у базы и таблиц стоит неверная кодировка latin1:
mysqldump -u admin --password=PASS --opt --default-character-set=latin1 --skip-set-charset -Q DB_NAME > dump.sql
sed -i 's/character set latin1 collate latin1_bin/character set cp1251 collate cp1251_bin/' dump.sql
sed -i 's/CHARSET=latin1/CHARSET=cp1251/' dump.sql

И залить полученный дамп.
Да, да знаем мы эту тему ;)
Напали на паренька а он всего то полезного людям хотел сделать)
Sign up to leave a comment.

Articles