![]() |
Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
|
|
|
|
#1 |
|
Senior Member
Регистрация: 21.04.2006
Сообщений: 245
|
Если кому-то поможет...
Чтобы корректно работал ORDER BY и поиск по LIKE в UTF-8 я сделал так: 1) удалил все таблицы в БД typo и создал их заново. Важно, чтобы таблицы создавались в DEFAULT CHARSET=utf8; PhpMyAdmin генерит скрипт на создание таблицы с latin1 вместо utf8, поэтому надо заменить. А если создавать базу через инсталлятор typo3, то умолчательный collation там стоит latin1_swedish_ci. Так что, похоже, без ручной модификации не обойтись. 2) поставил в localconf.php строку SET NAMES (см. выше) 3) со старого сайта сделал экспорт в .T3D и на новом сделал импорт из .T3D - все заработало Последний раз редактировалось demav; 09.06.2006 в 00:31 |
|
|
|
|
|
#2 |
|
Senior Member
|
Возможно ли в одной БД (дереве) иметь два сайта - первый на windows-1251, второй на utf-8?
При том необходимо чтобы charset соблюдался и в BE - редактировать то сайт нужно в той же кодировке? То есть переключение BE charset-а должно происходить в зависимости от того в какой ветке? Последний раз редактировалось Дылгеров Ц.В.; 09.06.2006 в 11:28 |
|
|
|
|
|
#3 | |
|
Продвинутый
|
Цитата:
|
|
|
|
|
|
|
#4 | ||
|
Administrator
|
Цитата:
Как это делать описано в доке по локализации. Frontend Localization Guide (свежая дока кстати) http://typo3.org/documentation/docum...guide/current/ Цитата:
(в базу все будет идти в utf8, юзер у которого руссий язык - будет в BE работать в windows 1251 - с этим подробно разбирался Павел Антонов - он вроде даже патч делал на эту тему... чтобы все-таки все было в utf8) А для вывода в FE - для разных деревьев можно проставить разные кодировки - на лету идет конвертация Последний раз редактировалось Valery Romanchev; 09.06.2006 в 17:41 |
||
|
|
|
|
|
#5 | |
|
Senior Member
|
Переношу БД в utf-8.
БД конвертируется хорошо. Так как default character set установлен в UTF-8, то при импорте дампа таблицы создаются с charset utf-8 и collation utf_general_ci. Сам дамп конвертирую такой программой Цитата:
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -p -u root mynewdbinutf8 < olddump.sql.utf-8 Enter password: **************************************** ERROR 1406 (22001) at line 1: Data too long for column 'title' at row 1 вызвано это тем что при конвертации из windows-1251 в utf-8 title длиной 163 превратился в 307 - а это уже больше чем tinytext Что посоветуете? Или я что то неправильно делал? Может в команде mysql -p -u root mynewdbinutf8 < olddump.sql.utf-8 добавить default-charset=windows-1251 и не конвертировать дамп? Последний раз редактировалось Дылгеров Ц.В.; 05.09.2006 в 05:29 |
|
|
|
|
|
|
#6 |
|
Administrator
|
я конвертировал из windows-1251 в uft8 с помощью экстеншена. Их там 2, использовал тот, который Андрей Шварцкопф делал.
|
|
|
|
|
|
#7 | |
|
Administrator
|
Цитата:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
|
Пишу тут то что может пригодится для новичков - так что не обессудьте.
mysql должен 4.1 и выше - старые версии mysql utf хранят иначе, точно не могу объяснить как, но в новых версиях мускла поиск будет работать правильно. Дамп из latin1 (те есть со старого сайта на cp-1251) должен быть читабельным в виндовой кодировке. Затем применяем команду iconv или можно применить php-скрипт указанный выше. Проверяем в hex-виде - в русских символах первый байт чаще всего D0. Значит это UTF-8. Для окончательного успокоения открываем файл в Ultra-Edit. Или меняя кодировку в клиенте ssh смотрим дамп командой cat VASH_DAMP | more. Сервер уже должен быть в кодировке UTF8 - в my.cnf [mysqld] default_character_set = utf8 Импорт надо делать, предварительно меняя character set client = utf8. Как это делается? Можно внедрить в начало полученного конвертированием дампа строку: "SET NAMES utf8;", а проще войти в каталог где лежит дамп и: mysql -p -u rooot set names utf8; use VASHA_BASA; source VASH_DUMP; Зачем нужна команда set names utf8. Наверное тут говорилось, но я повторюсь - чтобы клиент mysql говорил серверу mysql что данные в кодировке utf8. По умолчанию у клиента стоит latin1. То есть если не поменять кодировку, то сервер будет думать что все данные в latin1 и русские слова будут заново конвертироваться и будут вдвое большего размера и выглядеть крако-кракозябрами. (кстати вот тут я подумал - может тогда не конвертировать дамп - а предоставить эту возможность mysql? то есть не конвертировать дамп и обновременно не делать команду set names utf8?) В Typo3 3.8 в /t3lib/class.t3lib_db.php в функции sql_pconnect нет куска кода ответственного за выполнение команд в переменной $GLOBALS['TYPO3_CONF_VARS']['SYS']['setDBinit']). Вот этот код из Typo3 4.0: Цитата:
я же применил другой хак, взятый здесь http://bugs.typo3.org/view.php?id=1262 (спасибо за ссылку Валерию): if ($TYPO3_CONF_VARS["BE"]["forceCharset"]=='utf-8') { mysql_query("SET NAMES utf8",$this->link); mysql_query("SET CHARACTER_SET utf8",$this->link); } , но условие не срабатывало, а сработало if ($GLOBALS['TYPO3_CONF_VARS']["BE"]["forceCharset"]=='utf-8') { mysql_query("SET NAMES utf8",$this->link); mysql_query("SET CHARACTER SET utf8",$this->link); } - сами понимаете почему. Последний раз редактировалось Дылгеров Ц.В.; 13.07.2006 в 07:36 |
|
|
|
|
|
|
#9 |
|
Новенький
Регистрация: 01.08.2006
Сообщений: 3
|
<?php
$handle = fopen("olddump.sql","r"); $newhandle = fopen("olddump.sql.utf-8","w"); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); $contents = iconv("WINDOWS-1251","UTF-8",$contents); // $contents = convert_cyr_string(); - здесь кажется нет utf-8 // $contents = mb_convert_encoding($contents,"UTF-8","WINDOWS-1251"); fwrite($newhandle,$contents); } fclose($handle); fclose($newhandle); ?> Есть дамп базы в кодировке cp1251. После конвертации скриптом указанным выше, получается файл неприлично большого размера. Из 10 мегабайт получается более 300, дальше мой апач вешается... Вопрос: размер должен стать таким, это особенность ютф8 или что это? |
|
|
|
|
|
#10 |
|
Продвинутый
|
Если я не ошибаюсь, то вас ошбка в коде:
Код:
$contents .= fread($handle, 8192); Код:
$contents = fread($handle, 8192); А в общем, даже если предположить, что в дампе все символы из кириллицы (кодируемые в utf8 по 2 байта на символ) то файл не должен быть польше 20 мег. А ввиду того, что в дампе, как правило, достаточно много символов из latin1 (кодируемых 1-м байтом) то размер должен быть мег 16-18 при начальных 10. |
|
|
|