Задавайте вопросы, мы ответим
Вы не зашли.
Здавствуйте.
Вот возникла такая проблема.
Есть таблица (600 тыс записей, около 2 Гигов), в ней 2 сжатых текстовых поля. В данный момент кодировка в этих полях cp1251.
Мне необходимо перевести кодировку в UTF8. Поэтому возник вопрос: Можно ли над сжатыми столбцами делать преобразование кодировки или нужно сначала распаковать? Как вообще лучше всего это сделать над такой таблицей?
Неактивен
Что вы имеете в виду под сжатым текстовым полем? Текст, сжатый внешним архиватором? Как вы считываете сжатые данные обычно?
Неактивен
Сжато с помощью функции Mysql COMPRESS(). А читаю соответственно DECOMPRESS().
Неактивен
Нужно разархивировать сконвертировать и снова заархивировать. В MySQL это можно сделать как-то так:
Неактивен
Изменял таким образом:
UPDATE tablename SET `report_short`=COMPRESS(convert(convert(uncompress(`report_short`) USING cp1251) USING UTF8)) WHERE `id`>'0' AND `id`<='100000'
Первые 100 тыс записей норм, вторые почему-то весь текст такой стал: Сила нападениС
Скопировал опять исходную таблицу и начал делать заново, во второй раз такая фигня стала с 400-500 тыс.
Как вообще исправить вот такие символы которые я указал? convert пробовал в разных вариантах, не помогает. Загрузил в онлайн конвертер кодировок, показало CP1251 → UTF-8, но исправить в таблице не получается.
Неактивен
А если точечно выбрать данные из этой таблицы из «плохого» диапазона — там данные
в cp1251?
Неактивен
Вот почему-то на случайном диапазоне проявляется такой косяк.
Вроде в принципе функция php iconv("UTF-8", "WINDOWS-1251", $text) вернуть cp1251, а затем опять в mysql делать конверт попробую, но некоторые буквы теряются.
Неактивен
Просто если это действительно происходит на случайном диапазоне, то
это ошибка MySQL, и хорошо бы ее поймать и отправить на починку.
Неактивен
Я уже 3й раз копию базы делаю из-за этого, пробовал по 10 тыс записей делать, по 20 тыс, по 100 тыс и каждый раз случайно это вылезает, приходится после каждого преобразования проверять 1-2 записи из диапазона на корректность.
Буду пробовать еще...
Отредактированно nightssss (19.01.2010 14:17:19)
Неактивен
А нижний диапазон Вы тоже поднимаете ведь? Может, сделать бэкап, обновить всю
таблицу и потом сделать точечные проверки, что всё хорошо?
Неактивен
Я все запросы выполнял через phpmyadmin. Теперь же зашел через ssh и выполнял всё из консоли, и первый столбец преобразовался без проблем, хотя делал всё также. Сейчас второй преобразовываю.
Неактивен