Комментарии 23
Спасибо. Завтра на свежую голову попробую. Так как есть база которую уже давно нужно переместить на сервер с utf8, пробывал через iconv, ничего толкового не получилось. Надеюсь это поможет.
0
PhpMyAdmin или другая программа. Алгоритм такой — делаешь dump базы в plain/text, как-будто ты хочешь перенести БД на другой хостинг (или просто такой корявый BackUP). Дальше DROP таблиц/БД/создание параллельно ещё одной БД (нужное подчеркнуть). Изменяешь кодировку в файлах и выполняешь на сервере.
Операция занимает в лучшем случае пару минут, если умеешь пользоваться автоматической заменой текста. По крайней мере когда-то я так делал. Исключения составляют ситуации, когда база ОЧЕНЬ БОЛЬШАЯ и её нельзя прекратить её работу на некоторое время, и то я думаю можно как-нибудь решить этот вопрос.
Операция занимает в лучшем случае пару минут, если умеешь пользоваться автоматической заменой текста. По крайней мере когда-то я так делал. Исключения составляют ситуации, когда база ОЧЕНЬ БОЛЬШАЯ и её нельзя прекратить её работу на некоторое время, и то я думаю можно как-нибудь решить этот вопрос.
+3
Мне просто кажется этот метод более оптимальным по отношению ко времени. А так очень полезный скрипт. :)
P.S. Быть может даже стоит написать GUI к нему…
P.S. Быть может даже стоит написать GUI к нему…
0
В моем случае база не маленькая. В районе 5 гигов.
Да и не забывайте, что часть народа трудится на "гавнохостингах", и не везде можно делать `CREATE DATABASE`.
А если в проекте больше 10 таблиц, то копипаст и изменение DEFAULT CHARSET в описании таблицы оч. быстро надоест.
Я не притендую на уникальность идеи, скрипт написал для облегчения жизни себе и, возможно, другим.
Да и не забывайте, что часть народа трудится на "гавнохостингах", и не везде можно делать `CREATE DATABASE`.
А если в проекте больше 10 таблиц, то копипаст и изменение DEFAULT CHARSET в описании таблицы оч. быстро надоест.
Я не притендую на уникальность идеи, скрипт написал для облегчения жизни себе и, возможно, другим.
0
Извини конечно, но БД в 5 гигов на «говнохостингах» не держат, а на своём нет проблем с консолью для администратора БД.
Копировать я и не собирался. Просто заменить одну кодировку на другую стандартными функциями текстового редактора.
Скажем так — «серьёзные проекты» проще сразу доверить хорошему архитектору (администратору БД) на проектирование, чем потом заниматься таким… Возможно стоит выпустить новую версию проекта, как мы уже ждём какой месяц подряд новый хабр (это так, от нашего огорода в некоторый другой булдыжничек)
Я не хочу спорить до состояния «брызганья слюной со скоростью поросячего визга», а просто предлагаю спросить у администраторов БД — как лучше решить данную задачу?
Копировать я и не собирался. Просто заменить одну кодировку на другую стандартными функциями текстового редактора.
Скажем так — «серьёзные проекты» проще сразу доверить хорошему архитектору (администратору БД) на проектирование, чем потом заниматься таким… Возможно стоит выпустить новую версию проекта, как мы уже ждём какой месяц подряд новый хабр (это так, от нашего огорода в некоторый другой булдыжничек)
Я не хочу спорить до состояния «брызганья слюной со скоростью поросячего визга», а просто предлагаю спросить у администраторов БД — как лучше решить данную задачу?
+1
Зачем drop - просто export (с заменой таблиц). Потом в любом редакторе конвертишь в utf-8 (я напримр php expert editor-ом). Потом import - 3 минуты и готово.
Я так всегда делал... проблем не было ни с одним сервером.
Я так всегда делал... проблем не было ни с одним сервером.
0
Да ну вас всех! <a href=""htt">CAST уже отминили? Или в офф документация вы не искали?
0
Это ... опять сьел ссылку. Вот она - http://dev.mysql.com/doc/refman/5.0/en/c…
+1
А мне казалось, что уже все перешли на UTF-8 и 1251 в прошлом. // возможно ошибаюсь.
Сам лично все начал переводить на "утф", когда обновились сервера mysql с 4.0 до 4.1 — тогда в сети просто "кишили" вопросы:как поднять кодировку и в какую переводить?
Сам лично все начал переводить на "утф", когда обновились сервера mysql с 4.0 до 4.1 — тогда в сети просто "кишили" вопросы:как поднять кодировку и в какую переводить?
0
Пример из 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…
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…
0
А если у тебя 50 таблиц, в которых по несколько текстовых полей. Будешь ручками все это набирать?
А тут просто скрипт запустить и не париться. Точнее, логин, пароль и т.д. придется прописать.
Если бы нужно было конвертнуть 1 поле, я бы точно так и сделал.
Кстати, и проблему с буквой е = ё это не решает.
При такой конвертации на уникальном поле валилась ошибка Duplicate entry key. На словах "веселый" и "весёлый"
А тут просто скрипт запустить и не париться. Точнее, логин, пароль и т.д. придется прописать.
Если бы нужно было конвертнуть 1 поле, я бы точно так и сделал.
Кстати, и проблему с буквой е = ё это не решает.
При такой конвертации на уникальном поле валилась ошибка Duplicate entry key. На словах "веселый" и "весёлый"
0
Не надо превращать хабр в помойку скриптов. Либо суть рассказали бы и ссылку на dpaste дали, либо вообще не надо нам скриптопомоек.
+1
Спасибо конечно, но у меня всё давно в юникоде.
0
Не в тему, но может кому поможет. Сам провозился однажды.
Как перевести базу в кодировку 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
И залить полученный дамп.
Как перевести базу в кодировку cp1251 если у базы и таблиц стоит неверная кодировка latin1:
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
И залить полученный дамп.
0
Напали на паренька а он всего то полезного людям хотел сделать)
0
Не проще ли так:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
dev.mysql.com/doc/refman/5.0/en/alter-table.html
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
dev.mysql.com/doc/refman/5.0/en/alter-table.html
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Конвертация базы из Windows1251 в UTF8