Быстрый лёгкий надёжный форумный движок
Вы не вошли.
В данный момент у меня punbb russian-utf, база данных тоже в utf-8. Требуется перенести форум на сервер с базой данных в кодировке cp1251. Как это можно сделать?
на сервер с базой данных в кодировке cp1251
можно сделать чтобы на "базе с кодировкой cp1251" были таблицы с кодировкой utf8 для этого можно в install.php в конце каждого "create table" добавить "default charset=utf8"
пример:
case 'mysql':
case 'mysqli':
$sql = 'CREATE TABLE '.$db_prefix."bans (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(200),
ip VARCHAR(255),
email VARCHAR(50),
message VARCHAR(255),
expire INT(10) UNSIGNED,
PRIMARY KEY (id)
) TYPE=MyISAM DEFAULT CHARSET=utf8;";
update: таблицу search_words не надо делать с default charset или указать "default charset=binary" !
Зачем?!
речь о том, что на некоторых серверах mysql кодировка символов по-умолчанию отличается от utf-8
где-то после install.php я получил таблицы со шведским (!!!) чарсетом и коллейшном
у большинства русских провайдеров, как я понял, по дефолту таблицы получают cp1251. опытный адмни может изменить эти дефолты для mysql, но большинство людей о таких вещах даже не слышало.
поставят форум наперекосяк, а потом рапортуют, дескать utf - гомно, дайте виндовую кодировку
Грустно, блин. И так Рунет на уровне прошлого века тащится, в основном, и еще и поддерживают это.
некоторых серверах mysql кодировка символов по-умолчанию отличается от utf-8
у меня какраз так по умолчанию. даже денвер я так настроил - чтобы не расслабляться - чтоб на хостера похоже было 1:1
ниче - работает - строк утока set names пользую utf8 и ок ))
Прочитал и ужаснулся!!! Действительно, все по кривому от кривых рук. Прошу помощи...
1. "таблицы со шведским (!!!) чарсетом и коллейшном" - так и есть. Расскажите пожалуйста как это исправить и сделать по уму не потеряв информации из БД.
2. Соответственно есть wordpress на utf-8 и туда бы хотелось добавить последние темы форума, но он в кривой кодировке и ничего не получается... как сделать "интеграцию"...
Как я понимаю пробему - конвертация форума в utf-8. Как это сделать безболезненно - не знаю.
можно сделать бекап базы, затем отредактировать create table с явным указанием default charset utf8, восстановить из бекапа.
бекапировать удобнее отдельно структуру, отдельно данные.
1. create table допустим отредактирую, так ведь и сами данные надо в utf-8 перекодировать без потери структуры содержимого... как это сделать?
2. В данный момент при экспорте это выглядет так:
CREATE TABLE `bans` (
`id` int(10) unsigned NOT NULL auto_increment,
`username` varchar(200) collate latin1_german2_ci default NULL,
`ip` varchar(255) collate latin1_german2_ci default NULL,
`email` varchar(50) collate latin1_german2_ci default NULL,
`message` varchar(255) collate latin1_german2_ci default NULL,
`expire` int(10) unsigned default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=1 ;
можно ли просто согласно шаблону в ответе #2 удалить лишнее?
3. На хосте phpAdmin не позволяет импортировать (? - столкнулся впервые сейчас), но можно экспортировать. Можно ли посредством php-скрипта с хостинга импортировать данные в БД? Я не профи, поэтому приветствуются готовые решения.
Заранее СпасиБо!
Редактировался bindstream (2007-11-12 09:44:34)
1. не факт, что надо что-то перекодировать. сначала проверь в какой кодировке данные файле бекапа. при загрузке надо указать ту же кодировку, что есть в бекапе
2. надо удалить лишнее. вобщем как в сообщении #2
3. чтобы импортировать надо просто вызвать команду "SQL" и "выполнить" то что есть в бекапе
1251 лучше. Советую, проблем меньше и скорость выше.
на вкус и цвет товарищей нет. сейчас еще можно рассуждать что лучше, но через год-другой везде поголовно будет UTF-8 imho, если твой проект только начинает развиваться, бери за основу перспективные решения. чтобы не было "мучительно больно" потом.
это то же самое, что сравнивать табличную верстку и CSS.
1251 лучше. Советую, проблем меньше и скорость выше.
UTF лучше. Советую, проблем меньше и скорость выше
Проблема решилась.
Поясню ситуацию, может кому интересно будет. Я держал форум в локалке (ОС Linux), нужно было перенести форум на другой компьютер с Windows(тут почему-то появились проблемы с юникодом и возникла необходимость конвертирования базы в cp1251).
В общем легче оказалось на этот комп поставить Linux
нужно было перенести форум на другой компьютер с Windows(тут почему-то появились проблемы с юникодом и возникла необходимость конвертирования базы в cp1251).
ужос! я не знал, что под windows уникод невозможен, а то бы тоже на линукс перебрался. работаю спокойно под XP+Apache и ни о чем не догадываюсь
Эх руки кривые, под линуксом тоже юникод у меня не получается. Никак не могу перенести на другой хост с линуксом форум punbb. Страницы все в нормальной кодировке, а все сообщения отображаются знаками вопроса.
Делал стандартно: mysqldump database > dat.sql
потом mysql database < dat.sql
У меня также ситуация не решилась. Бекап базы форума на локальном компьютере верно не отображается ни при одной кодировке. Если же чере phpMyAdmin делать тупо ввод данных в поля в utf-8 - отображается нормально только в самом phpMyAdmin. На форуме же - знаки вопроса, даже при отредактированном дистрибутиве под utf-8 и ленгпаке.
Кто что подскажет?
дамп мускуля можно в консольке сконвертить при помощи iconv, в любую сторону
Теже грабли, - переношу форум на новый хост, слил базу, перенес файло, залил базу - все в вопросиках
Сливаешь базу, при этом указываешь кодировку.
ткрываешь редактором в кодировке указанной при сливе. Проверяешь у инструкций CREATE TABLE какая кодировка в DEFAULT, эта инструкция может быть отнесена как к отдельным полям в таблице так и ко всей таблице, проверь. Исправляй кодировку на нужную тебе, например вместо DEFAULT CHARSET ISO1204 должнро быть DEFAULT CHARSET win1251 или utf8, при этом убедись что данные редактор отображает как надо, бьез кракозябров. Сохраняй файл в нужной тебе кодировке. Создай БД c default charset --твоя кодировка, выполняй дамп.
Сливаешь базу, при этом указываешь кодировку.
К сожалению, ненашел где при импорте через phpMyadmin указать кодировку, но база utf8
ткрываешь редактором в кодировке указанной при сливе.
Открываю, все ОК. В редакторе галка - utf8.
Проверяешь у инструкций CREATE TABLE какая кодировка в DEFAULT, эта инструкция может быть отнесена как к отдельным полям в таблице так и ко всей таблице, проверь.
CREATE TABLE `lug_attachments` (
`id` int(10) unsigned NOT NULL auto_increment,
`poster_id` int(10) unsigned NOT NULL default '0',
`topic_id` int(10) unsigned NOT NULL default '0',
`post_id` int(10) unsigned NOT NULL default '0',
`uploaded` int(10) unsigned NOT NULL default '0',
`filename` varchar(255) NOT NULL default 'error.file',
`mime` varchar(64) NOT NULL default '',
`location` text,
`size` int(10) unsigned NOT NULL default '0',
`image_dim` varchar(64) NOT NULL default '',
`downloads` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
Исправляй кодировку на нужную тебе, например вместо DEFAULT CHARSET ISO1204 должнро быть DEFAULT CHARSET win1251 или utf8, при этом убедись что данные редактор отображает как надо, бьез кракозябров.
Изменил (было пару таблиц с ср1251, правда не столь важных), причем все нормально, ни кракозябров, ничего.
Сохраняй файл в нужной тебе кодировке. Создай БД c default charset --твоя кодировка, выполняй дамп.
Все сделал.
В итоге теже грабли ((
Проверяю через phpMyAdmin свежезалитый дамп у всех таблиц utf8_general_ci
Редактировался artzormchak (2008-10-24 20:51:54)
К сожалению, ненашел где при импорте через phpMyadmin указать кодировку, но база utf8
При экспорте не указать, нужно это сделать до экспорта. Во вкладке операции выбрать необходимую кодировку для поля "Сравнения". После этого осуществлять экспорт.
непомогло ...
Нужно убедиться, что у тебя в конфиге стоит MySQL Standart, а у тебя очень похоже, что Improved.
Для MySQL Standart специально подправлен /include/dblayer/mysql.php , в него добавлен
@mysql_query("SET NAMES 'utf8'");
{
@mysql_query("SET NAMES 'utf8'");
//@mysql_query("SET NAMES 'cp1251'");
if (@mysql_select_db($db_name, $this->link_id))
return $this->link_id;
вот кусочек, я так понимаю все ОК ...
Редактировался artzormchak (2008-10-25 07:54:18)