Подтвердить что ты не робот

Как изменить таблицу MySQL на UTF-8?

Я знаю, что существует множество настроек для языка для таблицы и базы данных.

Я уже создал базу данных. Я верю, что когда я его создал, это был default/LATIN. Я хочу изменить все - я имею в виду... как таблицу, так и базу данных, в UTF-8.

Как я могу это сделать? спасибо.

4b9b3361

Ответ 1

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

Ответ 2

aioobe отвечает, как изменить набор символов базы данных, таблицы или столбца. Вы должны иметь в виду, что

  • установка набора символов для таблицы просто указывает набор символов по умолчанию для новых столбцов в этой таблице. Он не меняет набор символов для существующих столбцов; вы должны делать эти столбцы индивидуально, или если вы хотите изменить каждый столбец типа столбца в таблице на тот же набор символов, там есть команда, которую вы можете использовать для этого: "alter table... convert to character set" (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html)

  • Если у вас уже есть данные, которые хранятся неправильно закодированными в столбце, то использование "alter table... modify" для изменения столбца не решит проблему. Например, если вы сохраняете данные UTF-8 в столбце Latin1, и вы меняете набор символов непосредственно с Latin1 на UTF-8, он по-прежнему будет некорректно кодироваться впоследствии. Это можно обойти, переведя из Latin-1 в UTF-8 через двоичный файл.

Ответ 3

Посмотрите Использование команды alter для изменения набора символов.

Еще одна полезная ссылка: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html

Общий вид

ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

и для конкретного столбца в таблице

ALTER TABLE column COLLATE utf8_general_ci

Ответ 4

Добавьте к своему my.cnf:

[mysqld]
character-set-server=utf8
default-collation=utf8_unicode_ci

И перезапустите mysqld deamon.

ДОБАВЛЕНО:

ALTER DATABASE your_base_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;

и my.cnf

SET collation_connection     = utf8_unicode_ci;
SET character_set_results    = utf8;
SET character_set_connection = utf8;
SET character_set_client     = utf8;

Ответ 5

1) Набор символов по умолчанию и сортировка по умолчанию:

SELECT @@character_set_database, @@collation_database;

Изменено через: ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

2) Набор символов по умолчанию и сортировка по умолчанию:

SELECT T.table_name, CCSA.character_set_name 
FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA 
WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "YOUR_DB";`

Изменено через: ALTER TABLE [table_name] CHARACTER SET utf8 COLLATE utf8_general_ci

3) Набор символов и сортировка столбцов:

SELECT c.TABLE_NAME, c.COLUMN_NAME, c.CHARACTER_SET_NAME, c.COLLATION_NAME 
FROM information_schema.COLUMNS c
WHERE c.table_schema = "YOUR_DB";`

Изменено через: ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

Третий требует, чтобы вы отключили проверку внешнего ключа для преобразования данных. Итак, все это вместе:

DELIMITER //
CREATE PROCEDURE migrate_charset_to_utf8()
  BEGIN
    DECLARE done TINYINT DEFAULT 0;
    DECLARE curr_table VARCHAR(64);

    DECLARE table_cursor CURSOR FOR
    SELECT T.table_name
      FROM information_schema.TABLES T
      WHERE T.TABLE_TYPE = 'BASE TABLE' AND
        T.TABLE_SCHEMA = 'YOUR_DB';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN table_cursor;

    table_loop: LOOP
      FETCH table_cursor INTO curr_table;
      IF done THEN
        LEAVE table_loop;
      END IF;

      # Convert table data(columns) charset
      SET @sql_str1 = CONCAT("ALTER TABLE ", curr_table, " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
      PREPARE stmt1 FROM @sql_str1;
      EXECUTE stmt1;
      DEALLOCATE PREPARE stmt1;

      # Set table default charset e.g for new columns added
      SET @sql_str2 = CONCAT("ALTER TABLE ", curr_table, " CHARACTER SET utf8 COLLATE utf8_general_ci");
      PREPARE stmt2 FROM @sql_str2;
      EXECUTE stmt2;
      DEALLOCATE PREPARE stmt2;

    END LOOP table_loop;

    CLOSE table_cursor;
  END//

DELIMITER ;


SET @@FOREIGN_KEY_CHECKS = 0;
CALL migrate_charset_to_utf8();
SET @@FOREIGN_KEY_CHECKS = 1;

ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

EDIT: посмотрите здесь вместо