Category: Tech articles

  • Конвертация БД из CP1251 в UTF8

    Конвертацию БД из Win-1251 в UTF8 можно произвести разными способами, но самый быстрый и простой – использование SQL-запроса, приведенного ниже.

    ALTER TABLE `db_name`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

    При помощи этого запроса, можно конвертировать таблицу базы данных в любую, доступную в MySQL кодировку. Но что делать, если таблиц 100, 200 или больше, и все таблицы необходимо перекодировать в UTF8 из Win-1251? Для решения этой проблемы, можно отправить в MySQL запрос, который сгенерирует необходимые SQL-запросы для всех таблиц БД. При использовании PHPMyAdmin останется только скопировать результаты и запустить их как SQL-запрос:

    SELECT CONCAT( \'ALTER TABLE `\', t.`TABLE_SCHEMA` , \'`.`\', t.`TABLE_NAME` , \'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;\' ) AS sqlcode
    FROM `information_schema`.`TABLES` t
    WHERE 1
    AND t.`TABLE_SCHEMA` = \'My_DB_for_convert\'
    ORDER BY 1
    LIMIT 0 , 90

    Этот запрос будет работать в MySQL версии 5 и выше. My_DB_for_convert – следует заменить на имя БД, таблицы в которой необходимо конвертировать в UTF-8.

    utf8_general_ci или utf8_unicode_ci

    utf8_general_ci и utf8_unicode_ci отличаются только скоростью работы и порядком сортировки. Поскольку utf8_general_ci работает быстрее – это и есть предпочтительный выбор. Подробнее, про отличия utf8_general_ci и utf8_unicode_ci можно прочитать в официальной документации MySQL. В случаее необходимости, способом описанным выше, можно будет изменить подкодировку UTF8 c utf8_general_ci на utf8_unicode_ci.