Почему Flyway не выполняет ALTER DATABASE?

#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.