[image]

Перевод Форумов Авиабазы на UTF-8

 
1 2 3 4 5 6 7 8
+
-
edit
 

Balancer

администратор
★★★★★
someuser, 18.02.2004 19:00:07 :
2 Balancer
Скриптом можно надёргать из базы всё что угодно... Хоть во флат, а из него тем же скриптом - в базу на локалке. :)
 


Да при чём тут локалка? :D

Проблема возникла отнюдь не простом переходе на новую версию MySQL. А в mysqldump'е. При конвертации базы старой в новую. По частям бы сымитировать то же самое не вышло бы - инфа, выдернутая и вставленная скриптом проходит иные пути, чем mysqldump и рассматрвиается иначе в плане кодировок. А mysqldump - он только целиком всё позволяет сбросить/втянуть.
   
RU Dem_anywhere #18.02.2004 19:59
+
-
edit
 
проблема с отображением в "Человек и общество" - стоит content="text/html; utf-8" вместо content="text/html; charset=utf-8"


в mysqldump можно задать условие на вывод - например
"--where=post_id>20 AND post_id<30"
потом удалить эти записи в таблице и импортнуть данные заново
Не знаю структуры базы форума - но там текст сообщения в одной таблице вроде хранится...
   
+
-
edit
 

Balancer

администратор
★★★★★
Dem_anywhere, 18.02.2004 19:59:23 :
проблема с отображением в "Человек и общество" - стоит content="text/html; utf-8" вместо content="text/html; charset=utf-8"
 


Хм. Посмотрю. Хотя я этим не занимаюсь, а код форума в этом месте я не трогал с его рождения :D


>в mysqldump можно задать условие на вывод - например
>"--where=post_id>20 AND post_id<30"

Посмотрю, хотя в man'е у меня такого нет по нему.

>потом удалить эти записи в таблице и импортнуть данные заново

Простой импорт не поможет. В MySQL нет пока функций замены кодировки столбцов и таблиц. Только для базы можно поменять. Для столбцов и таблиц можно задать, но нельзя изменить. Так что - только через дамп.

>Не знаю структуры базы форума - но там текст сообщения в одной таблице вроде хранится...

Тексты сообщений - естественно в одной.
   
RU Dem_anywhere #18.02.2004 20:33
+
-
edit
 
из того, что он по --help выдаёт (4.0.15)
-w, --where=name Dump only selected records; QUOTES mandatory!

А экспортнуть нужный кусок в файл и натравить на него перекодировщик в utf8?
а потом закачать назад
   
+
-
edit
 

Balancer

администратор
★★★★★
Dem_anywhere, 18.02.2004 20:33:19 :
из того, что он по --help выдаёт (4.0.15)
-w, --where=name Dump only selected records; QUOTES mandatory!
 


Да, точно.


>А экспортнуть нужный кусок в файл и натравить на него перекодировщик в utf8?
>а потом закачать назад

Я так и пытался позавчера делать. Если интересна поднаготная проблемы, то дело обстоит так:

1. Сделал mysqldump старой базы.
2. Перегнал дамп в UTF8.
3. Втянул его назад, убедившись, что всё ок (исключая, понятно, сортировку, поиск и т.п.).
4. Обновил MySQL (напомню, что 4.0.x не поддерживает UTF8).
5. После обновления натравил, в строгом соответствии с инструкцией myisamchk с параметром применения кодировки UTF8 и т.п.

Вроде, всё было ок. MySQL компилил с ключом кодовой таблицы UTF8.
Уже после того выяснилось, что MySQL всё равно пашет в cp1251.
Прописал принудительно в конфиге.
После этого он стал отдавать инфу в cp1251. Это те минут 40 "квадратиков", что 16-го с ~18:00 до 18:40 были. Когда заметил, когда разобрался - вернул назад.
Выяснилось вот что. База, сидящая в нём физически записана в UTF8. Но считает он, что она в cp1251. Если у него и просят 1251, то он отдаёт как есть. Всё работает (сейчас). Если ему сказать, что он в UTF8, он начинает свою базу преобразовывать как бы из 1251 в UTF8! Т.е. получается двойное преобразование.

Прошлой (т.е. с 16-го на 17-е) ночью пытался провести такой финт. Сбросить базу, поменять вручную все упоминания кодировки cp1251 на utf8 и втянуть обратно. Долго не мог понять чем сконвертить. В конце концов сделал это Perl-скриптом.

Всё хорошо, но при втягивании такого файла у него сперва начинается ругань на то, что "максимальная длина ключа 500 байт" (как выяснилость, возникает при объявлении VARCHAR(167) и больше. А в базе полно VARCHAR(255)). Ещё много возни. Исправление всех таких VARCHAR с 255 на 167. Принимает, но падает при втягивании дампа. Каждый раз на одном месте для одного дампа. При чём часто - на небольших вставках, скажем, по 1кБ.

Даже отдельно мучал, отдельно структуру, отдельно - данные.

Последнее, до чего додумался - это написать тяжеловесный PHP-скрипт, который вырезает SQL-запросы из дампа и по одному их скармливает базе. Но в ту ночь уже прогнать до конца его не успел (очень медленно, долго файл разбирать приходится). Так что вернул дамп, сброшенный до этих извращений и пошёл спать.

В прошлую ночь - отсыпался.

В эту - попробую снова помучать :)

Кстати, уже позже, сегодня, кажется, допёр почему осыпались голосования. Они хранятся в базе в виде serialize (кто ж так додумался!) и поэтому при конвертациях там всё поехало. После того, как базу с нормальными кодировками настрою, придётся их вручную из старой базы восстанавливать.
   
+
-
edit
 

Balancer

администратор
★★★★★
Dem_anywhere, 18.02.2004 19:59:23 :
проблема с отображением в "Человек и общество" - стоит content="text/html; utf-8" вместо content="text/html; charset=utf-8"
 


Исправил. Глюк в скине был. Впрочем, по стандарту итак должно быть ок.
Кроме того, кодировку ещё ответ сервера возвращает, а у него, вроде, приоритет выше.
   
+
-
edit
 

someuser

опытный

Брррр... Не стоят эти мучения того, чтобы так париться...
К тому же, не плохо бы движок сначала под это дело переписать.
   
+
-
edit
 

someuser

опытный

>Да при чём тут локалка?
Ну в смысле локалхост.
Чтобы значится там поиграться с конвертированием, всё отработать и т.п. :)
   
+
-
edit
 

Balancer

администратор
★★★★★
someuser, 18.02.2004 21:04:51 :
Брррр... Не стоят эти мучения того, чтобы так париться...
 


СтОят :)
Во-первых, того гляди все там будем.
Во-вторых, слишком часто стал народ нарываться на постинг запрещённых для cp1251 символов.
В-третьих, так просто правильнее :D

>К тому же, не плохо бы движок сначала под это дело переписать.

А чего его переписывать, PHP с multibyte strings хорошо работает. Пока только одна проблемка есть, и та не в форуме, а в моих автоссылках. Да оно и понятно, автоссылки в cp1251, а текст форума - в UTF-8 :) Попозже исправлю.
   
+
-
edit
 

Balancer

администратор
★★★★★
someuser, 18.02.2004 21:07:20 :
Ну в смысле локалхост.
 


Да понял я :)

>Чтобы значится там поиграться с конвертированием, всё отработать и т.п. :)

Проблемы то не в этом вылезли. Я же уже писал выше :)
   
+
-
edit
 

someuser

опытный

2 Balancer
Так это первый этап.
Второй этап - поставить параллельно форум с кусочком базы на сервер и с ним играться - никому не мешая (ну по возможности), и при этом не мучаясь с тормозами при работе с полугиговой базой. :)
ЗЫ Так лучше бы это время потратить на всякие там цитаты, формы ответа и т.п. :)
   
+
-
edit
 

Balancer

администратор
★★★★★
someuser, 18.02.2004 21:56:37 :
ЗЫ Так лучше бы это время потратить на всякие там цитаты, формы ответа и т.п. :)
 


Я бы давно это всё уже сделал, но не хочется делать это зазря. Потому что на версию 2.0 переходить придётся всё равно. А значит - прощай все патчи, здравствуй возня с ними по-новому. Не люблю :)
   
+
-
edit
 

someuser

опытный

Ну лучше то же, но с UTF... :)
   

Zeus

Динамик

Balancer, 19.02.2004 05:08:52 :
В-третьих, так просто правильнее :D
 


Гы-гы-гы :D
   
EE [Татарин] #19.02.2004 10:05
+
-
edit
 
Блин, и тут права русскоязычных ущемляют... :D
 
Не войти никак под именем в кириллице... :\
 
RU Dem_anywhere #19.02.2004 10:08
+
-
edit
 
Balancer, 18.02.2004 20:49:46 :
Всё хорошо, но при втягивании такого файла у него сперва начинается ругань на то, что "максимальная длина ключа 500 байт" (как выяснилость, возникает при объявлении VARCHAR(167) и больше.
 


Логично - 167*3 = 502

кстати - будешь с кусками работать - не забудь при экспорте про --no-create-db и --no-create-info

Кроме того, кодировку ещё ответ сервера возвращает, а у него, вроде, приоритет выше
 
Не знаю, как по стандарту, но мне кракозябры увиделись - иначе и не заметил бы :)
   
+
-
edit
 

Balancer

администратор
★★★★★
Dem_anywhere, 19.02.2004 10:08:35 :
кстати - будешь с кусками работать - не забудь при экспорте про --no-create-db и --no-create-info
 


А без этого никак. Ворочать создание структуры в 600Мб файлах - то ещё удовольствие. Так что отдельно структура, отдельно данные :)

>Не знаю, как по стандарту, но мне кракозябры увиделись - иначе и не заметил бы :)

А у меня не было кракозябр :-P

Впрочем, ладно, поправил уже :)
   
+
-
edit
 

Balancer

администратор
★★★★★
Про третью попытку перевода (сегодня ночью) см. Ловушка-68 [Balancer#19.02.04 10:04] :)
   
+
-
edit
 
>Блин, и тут права русскоязычных ущемляют...

Меня безусловно насторожил первый же постинг Ромы:

Сегодня ночью перевёл форумы на сабж. Больше не будет (надеюсь) глюков со вставками западных символов.
 


Согласитесь политика проводимая на базе весьма странная - нумерация пользователей, стук, а теперь еще забота о нерусских буквах.
Хотя разницы между UTF-8 и Win-1251 - нет. Все эти кодировки навязанны русскому народу нашими врагами, что очевидно уже из их названий.
 
+
-
edit
 

Balancer

администратор
★★★★★
[TEvg:],19.02.2004 10:16:30
Хотя разницы между UTF-8 и Win-1251 - нет. Все эти кодировки навязанны русскому народу нашими врагами, что очевидно уже из их названий.
 


Ну так и чего ты тогда выпендриваешься?

А "ненавязанной" кодировки нет вообще. Никакой.
КОИ7 - привязка к ангийскому алфавиту, что у русской, что у английской, что у смешанной заглавной раскладки.
КОИ8 - аналогично, только что оба алфавита целиком вошли.
Основная - русские буквы выперты в старшую часть кодовой таблицы ради сохранения латинской нижней части.
Альтернативная (ака DOS866) - с привязкой к буржуйской псевдографике.

и т.д. :)

Короче, хорошь бредить, просыпайся давай.
   
+
-
edit
 
>Ну так и чего ты тогда выпендриваешься?
>А "ненавязанной" кодировки нет вообще. Никакой.

Я знаю. И потому не упрекаю за переход именно на UTF-8. Хрен редьки не слаще. Я только кране недоволен тем что стало нельзя писать в форумы на русском языке из старых браузеров.
 
+
-
edit
 
Видимо это произошло потому что "кодировка" - сугубо нерусское явление. Только извращенный мозг западного человека мог додуматься до такого.
 

Pazke

втянувшийся

[TEvg:],19.02.2004 10:47:38
Видимо это произошло потому что "кодировка" - сугубо нерусское явление. Только извращенный мозг западного человека мог додуматься до такого.
 


"Это как же вашу мать, извиняюсь понимать ?" © :D :D :D
   
+
-
edit
 

someuser

опытный

Мдя, пришёл Тевг и всё опошлил. :)
   
1 2 3 4 5 6 7 8

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru