#mysql #flyway
#mysql #flyway
Вопрос:
Мне также нужно обновить набор символов базы данных и таблицы.
ALTER DATABASE mydatabase CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
USE mydatabase;
DROP PROCEDURE IF EXISTS `convert_table_charset`;
DELIMITER $$
CREATE PROCEDURE convert_table_charset()
BEGIN
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ‘mytable’) THEN
ALTER TABLE mytable MODIFY name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
END IF;
END; $$
DELIMITER ;
CALL convert_table_charset();
DROP PROCEDURE IF EXISTS `convert_table_charset`;
Скрипт выполняется без ошибок.
2020-10-16 12:40:09,490 DEBUG --- [RMI TCP Connection(2)-127.0.0.1] o.f.c.i.d.SqlScript : Found statement at line 1: ALTER DATABASE mydatabase CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci
2020-10-16 12:40:09,495 DEBUG --- [RMI TCP Connection(2)-127.0.0.1] o.f.c.i.d.SqlScript : Executing SQL: ALTER DATABASE mydatabase CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci
2020-10-16 12:40:10,189 DEBUG --- [RMI TCP Connection(2)-127.0.0.1] o.f.c.i.c.DbMigrate : Successfully completed and committed migration of schema `mydatabase` to version 220.0001
Но ВЫБЕРИТЕ @@character_set_database, @@collation_database; по-прежнему возвращает старое значение.
Что я делаю не так? Мои таблицы были обновлены правильно, но база данных — нет, и это утверждение отлично работает в Sequel Pro.
-
Flyway 3.2.1
-
MySQL 5.6.47
Запрос
SHOW COLLATION WHERE Charset like 'utf8%';
Одним из результатов является:
utf8mb4_unicode_ci utf8mb4 224 Yes 8
Запрос
SHOW VARIABLES LIKE '%version%';
Результат
innodb_version 5.6.47
protocol_version 10
slave_type_conversions
версия 5.6.47
version_comment Доморощенный
version_compile_machine x86_64
version_compile_os osx10.15
Комментарии:
1. Вы меняете набор символов определенной таблицы, а не набор символов сервера по умолчанию.
2. Эти переменные не являются специфичными для таблицы, они являются настройками для подключения.
3. Вы прочитали первую строку моего скрипта? ALTER DATABASE выполняется без ошибок, но набор символов базы данных по-прежнему является старым значением @Barmar
4. Чтобы продолжить комментарий @Akina, попробуйте подключиться к базе данных с помощью
mysql
клиента командной строки или чего-то подобного и выполните инструкцию ALTER DATABASE. Таким образом, ошибки (если таковые имеются) должны быть сразу видны. Желаю удачи.5. @BobJarvis-RestorateMonica При выполнении инструкции в Sequel Pro ошибок нет, и она обновляется правильно. Работает не только в Flyway.