View source for Преобразование базы данных в UTF-8

Имеется также ((de Deutsch)) и ((../DatabaseConversion  English))

{{toc numerate=1}}
file:/unicode.svg?right&100 

Разработка инструкции не завершена.
В инструкции описана процедура преобразования кодировки базы данных из имеющейся (cp1251 для русскоязычных сайтов) в версиях R5 в Юникод в версии R6. 
В процессе преобразования необходимо:
  * перенести весь код и данные за один раз, 
  * отключить сайт на время преобразования, 
  * провести пробные проверки.
Пожалуйста, оставьте отзыв для улучшения этой инструкции.

===Пошаговая инструкция===

====Перед обновлением====
file:/utf8_conversion_script_1.png?right&400
  1. Если в вашей базе есть таблицы типа MyISAM их все следует преобразовать в тип InnoDB через ((/Doc/Русский/АдминПанель АдминПанель)) 
    * АдминПанель -> База данных -> Преобразование
  1. Создайте  ((/Doc/English/Backup резервные копии)) всей инсталляции, т.е. базы данных и файлов.
  2. Создайте локальную инсталляцию самой свежей версии (или удаленную, при этом избегайте таймаутов и прекращения работы скрипта)
  1. Импортируйте базу данных из резервной копии, учтите что импорт  может занять около 15 минут.
  2. Запустите **((source:6.0/community/action/admin_utf8.php скрипт конвертации))** с Админскими правами (-> см. действие ##""{{admin_utf8}}""## ниже).
    1. Преобразуйте (alter) таблицы ##file##, ##page##, ##page_link## and ##revision## для работы без префиксов ключей длиннее **767** байт (**опционально**)
      * MySQL версий до **5.7.7** или MariaDB до **10.2.2** по умолчанию не поддерживают ключ индекса префиксов больше, чем 767 байт (до 3072 байт).
      * Рекомендуется (если есть возможность) обновить базы данных для поддержки больших индексов.
    2. Преобразуйте вашу базу данных и таблицы в кодировку ##utf8mb4##
    3. Преобразуйте данные записанные в различных кодировках (например Greek записана как Latin1)
      * Это необходимо только в том случае, если вы запустили свою вики в мультиязычном режиме и были созданы страницы с другим кодовым набором. 
  4. **!!ПРОВЕРЬТЕ!!** через phpMyAdmin или Adminer все соответствующие колонки что преобразование прошло успешно до того, **как вы продолжите**!
    * Например, скрипты могут не преобразовать столбец ##body## из-за прекращения работы по таймауту.

====Обновление до R6.0====
file:/wackowiki_r6_ru_upgrade_1.png?right&400&caption
  1. Скачайте текущую версию R6.0.x
  1. Выполните ((/Doc/Русский/Обновление обновление))  до 6.0.x через программу установки.

====После обновления==
file:/utf8_conversion_script_2.png?right&400
  1. Выполните post-upgrade скрипт в ##""{{admin_utf8}}""##
    1. Сбросьте увеличенные колонки TEXT обратно в TEXT или MEDIUMTEXT
    2. Преобразуйте HTML-сущности в соответствующие символы Юникода
    3. Удалите колонку ##converted## из таблиц
  2. Удалите файл действия **admin_utf8.php** из папки ##action/##.
  3. синхронизируйте обновленные данные через панель администрирования

((/Doc/Русский/Обновление <- Вернемся к заметкам по обновлению для 6.0.x.))

===Скрипт===

%% ln -s ../../community/action/admin_utf8.php admin_utf8.php%%

{{include page="/Dev/Release/R6.0/Upgrade/DatabaseConversion/Script"}}

====Локализация====
%%
['en']
	'Utf8Utilities'			=> 'Unicode conversion utilities',
	'Utf8PreUpgrade'		=> 'Pre-Upgrade Routines for R6.x',
	'Utf8KeyPrefixes'		=> 'Alter tables to work without key prefixes longer than 767 bytes',
	'Utf8AlterTablesStarted'	=> 'Alter tables started',
	'Utf8Tables'			=> 'Tables:  file, page, page_link and revision',
	'Utf8ConvertDatabase'		=> 'Convert database and tables based on charset to',
	'Utf8TableConversionStarted'	=> 'Table conversion started',
	'Utf8TablesConverted'		=> 'Tables converted.',
	'Utf8ConvertCrossCharset'	=> 'Convert all cross charset records',
	'Utf8TablesConversionStarted'	=> 'Tables record conversion started',
	'Utf8RecordsConverted'		=> 'Records converted',
	'Utf8TablesRecordsConverted'	=> 'Tables records converted.',
	'Utf8PostUpgrade'		=> 'Post-Upgrade Routines for R6.x',
	'Utf8RemoveColumnConverted'	=> 'Remove column \'converted\' from tables',
	'Utf8DropedColumnConverted'	=> 'Droped column \'converted\' from tables',
	'Utf8ResetTextColumns'		=> 'Reset up-sized TEXT columns back to TEXT or MEDIUMTEXT',
	'Utf8StartedTextConversion'	=> 'Started conversion of TEXT columns',
	'Utf8ResetTextColumns'		=> 'Reset converted TEXT columns',
	'Utf8ConvertHtmlEntities'	=> 'Convert HTML entities to their corresponding Unicode characters',
%%
%%
['ru']
	'Utf8Utilities'			=> 'Функции для преобразования Юникода',
	'Utf8PreUpgrade'		=> 'Pre-Upgrade Routines for R6.x',
	'Utf8KeyPrefixes'		=> 'Измените таблицы для работы без ключевых префиксов длиннее 767 байт.',
	'Utf8AlterTablesStarted'	=> 'Началась смена таблиц',
	'Utf8Tables'			=> 'Таблицы:  file, page, page_link и revision',
	'Utf8ConvertDatabase'		=> 'Преобразование базы данных и таблиц на основе набора символов в',
	'Utf8TableConversionStarted'	=> 'Начался пересчет таблиц',
	'Utf8TablesConverted'		=> 'Таблицы преобразованы.',
	'Utf8ConvertCrossCharset'	=> 'Преобразование записей в различных кодировках.',
	'Utf8TablesConversionStarted'	=> 'Началось преобразование записей данных в таблицах',
	'Utf8RecordsConverted'		=> 'Преобразование записей данных',
	'Utf8TablesRecordsConverted'	=> 'Записи, преобразованные в таблицы.',
	'Utf8PostUpgrade'		=> 'Процедура после обновления на R6.x',
	'Utf8RemoveColumnConverted'	=> 'Удаляет колонку \'converted\' из таблиц.',
	'Utf8DropedColumnConverted'	=> 'Колонка \'converted\' была удалена из таблиц.',
	'Utf8ResetTextColumns'		=> 'Сбросить увеличенные колонки TEXT на TEXT или MEDIUMTEXT',
	'Utf8StartedTextConversion'	=> 'Началось преобразование столбцов TEXT,
	'Utf8ResetTextColumns'		=> 'Сбросить преобразованные колонки TEXT',
	'Utf8ConvertHtmlEntities'	=> 'Преобразование HTML-сущностей в соответствующие символы Юникода',
%%