Ответ 1
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
Я знаю, что существует множество настроек для языка для таблицы и базы данных.
Я уже создал базу данных. Я верю, что когда я его создал, это был default/LATIN. Я хочу изменить все - я имею в виду... как таблицу, так и базу данных, в UTF-8.
Как я могу это сделать? спасибо.
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
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 через двоичный файл.
Посмотрите Использование команды 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
Добавьте к своему 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;
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: посмотрите здесь вместо