VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Перевод форума с 1251 на UTF8 - старые ссылки на форум и ошибки базы
0
Всем вечер добрый!
Возник вот такой интересный вопрос. Несколько дней назад форум на вобле 3.8.0 был перенесён на новый сервер. Под переезд был запланирован давно уже откладываемый переход на UTF8 (ранее форум был в 1251).
Собственно форум успешно переехал, кодировка успешно изменена и всё крутится нормально, но возникла интересная проблемка: периодически на админскую почту сыпятся ошибки БД вида:
Code:
Ошибка базы данных в vBulletin 3.8.0:
Invalid SQL:
SELECT *
FROM vb_tag
WHERE tagtext = '???????????? ????';
Ошибка MySQL : Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
Номер ошибки : 1267
Возникает как при простом поиске по форуму, так и при поиске по имени юзера и поиске по тегам. Разумеется, сами по себе все поиски работают нормально, такое происходит, когда на форум приходят по старой ссылке, содержащей русские символы в 1251. Чаще всего приходят таким образом даже не люди - поисковые роботы.
Внимание, вопрос: нет ли идей, как без большого геморроя эти грабли побороть? Уж очень не хочется поисковикам в течение энного времени страничку с ошибкой показывать.
нужно переписать все теги
в БД они хранились в cp1251, а сейчас UTF-8
посмотри так же другие таблицы, как данные выглядят в самой базе (через панель акк. или майадмин)
так же могут быть проблемы с входом узера в свой кабинет, если этот пользователь создавал свои папки для ЛС на русском языке (я писал скрипт для решения этой проблемы, где то лежит на форуме)
@Vovan
Специалист
Join Date: Jan 2006
Location: 127.0.0.1
Posts: 226
Версия vB: 4.1.x
Reputation:
Professional 429
Репутация в разделе: 137
0
Не, вы меня не поняли. Форум работает абсолютно нормально, и теги и поиск и всё остальное, в базе всё ок, можно не сомневаться, уж в этом-то была не одна собака съедена ;)
Проблема возникает только со старыми ссылками, которые хранятся в кэше поисковиков. Т.е. на форум приходит запрос например вида "/tags.php?tag=%EC%EB%F8%E0_и_т.д." (содержащий в URL русские символы кодировки 1251). Запрос идёт в БД, а там UTF8, в итоге имеем ошибку 1267.
@zCarot
zМарковь
Хочет третью строчку =)
Join Date: May 2005
Location: Лольск
Posts: 2,883
Версия vB: 3.8.x
Reputation:
Гуру 7454
Репутация в разделе: 5101
0
Vovan, сделай в tags.php конвертацию в utf8 при получении похожего на cp1251 (можно, допустим, получить номер символа и сравнить с диапазоном для cp1251)
@Vovan
Специалист
Join Date: Jan 2006
Location: 127.0.0.1
Posts: 226
Версия vB: 4.1.x
Reputation:
Professional 429
Репутация в разделе: 137
3
zCarot, как вариант - да, уже думал об этом. Но как минимум тоже самое придётся делать и с search.php и с memberlist.php, и наверняка где-то ещё вылезет. И так при каждом обновлении движка. Это и получится геморрой ;)
Собственно потому и спросил, вдруг кто-то сталкивался и нашёл более изящный вариант. Не я же первый меняю кодировку форума. ;)
Vovan добавил 02.02.2009 в 15:23
Ну что же, пока решил эту проблему так (пока исправление только для tags.php, по мере возникновения ругани на другие скрипты добавлю исправление и для них):
Ищем в tags.php текст
Code:
$tag = $db->query_first("
SELECT *
FROM " . TABLE_PREFIX . "tag
WHERE tagtext = '" . $db->escape_string($vbulletin->GPC['tag']) . "'
");
И добавляем ДО него строчку
Code:
if (!preg_match('//u',$vbulletin->GPC['tag'])) $vbulletin->GPC['tag'] = iconv("windows-1251", "UTF-8", $vbulletin->GPC['tag']);
Красным выделена предыдущая кодировка форума.
Last edited by Vovan : 02-02-2009 at 04:23 PM.
Reason: Добавлено сообщение
@Dimitrij
Простоузер
Join Date: Sep 2013
Posts: 73
Версия vB: 5.x.x
Reputation:
Опытный 43
Репутация в разделе: 42
0
Переводил таблицы БД (vb 5.30) в utf8_general_ci.
Почему-то перевелись все, но кроме двух таблиц: words и phrase
команда SQL "ALTER TABLE `имя_БД`.`phrase` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"
выдала ошибку
Quote:
#1062 - Дублирующаяся запись 'common.langDirRTL-4' по ключу 'name_lang_type'
а команда
Quote:
ALTER TABLE `имя_БД`.`phrase` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
выдала ошибку:
Quote:
#1062 - Дублирующаяся запись 'всё' по ключу 'word'
Подскажите, как решить эту проблему. Или может быть можно оставить эти две таблицы в cp1251_general_ci и это не вызовет никаких проблем?
Dimitrij добавил 09.05.2017 в 21:37
в сообщении выше ошибка: вторая комманда, естественно
ALTER TABLE `имя_БД`.`words` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Last edited by Dimitrij : 05-09-2017 at 10:37 PM.
Reason: Добавлено сообщение
AleX
Гость
Posts: n/a
@Dimitrij, если база небольшая, то можно сделать это и ручками в редакторе.
Luvilla
Гость
Posts: n/a
Quote:
Originally Posted by Dimitrij
Дублирующаяся запись 'common.langDirRTL-4' по ключу 'name_lang_type'