Ответ 1
Попробуйте следующее:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
У меня есть существующая таблица, и я хочу преобразовать кодировку только для одного конкретного столбца в utf-8.
Я знаю, что эта команда ALTER TABLE table_name CONVERT TO CHARACTER SET utf8
делает это для всей таблицы, но я ищу команду, специфичную для столбца.
Есть ли для этого команда?
Попробуйте следующее:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
Я разделяю это, это всегда может помочь... Я недавно изменил базу данных; переход от utf8 к utf8mb4; вот сценарий, который позволил мне сгенерировать изменения...
Сгенерируйте команды SQL для изменения таблиц:
SELECT CONCAT("ALTER TABLE '",'TABLE_NAME',"' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")
FROM 'information_schema'.'TABLES'
WHERE 'TABLE_SCHEMA' = 'xxxx';
Создайте команды SQL для изменения каждого столбца:
SELECT CONCAT("ALTER TABLE '",'TABLE_NAME',"' MODIFY '",'COLUMN_NAME',"' ",COLUMN_TYPE," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ",IF('IS_NULLABLE'='YES', 'NULL', 'NOT NULL')," ",IF('COLUMN_DEFAULT' IS NOT NULL, CONCAT(" DEFAULT '", 'COLUMN_DEFAULT', "'"), ''),";")
FROM 'information_schema'.'COLUMNS'
WHERE 'TABLE_SCHEMA' = 'xxx' AND 'TABLE_NAME' = 'xxxx' AND ('CHARACTER_SET_NAME' IS NOT NULL OR 'COLLATION_NAME' IS NOT NULL);
Обратите внимание, что для внешних ключей и первичных ключей, которые устанавливают взаимосвязь, вам необходимо отключить проверку ключей foregin перед изменением столбца
SET FOREIGN_KEY_CHECKS=0;
и включите его позже.
SET FOREIGN_KEY_CHECKS=1;
Ниже один работал на меня.
ALTER TABLE table_name
MODIFY column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Этот работал для меня.
ALTER TABLE 'table_name' CHANGE 'column_name' 'column_name' TEXT CHARACTER SET utf8 COLLATE utf8mb4_unicode_ci;