@@ -924,6 +924,7 @@ public class MySQL : BaseDatabase<MySqlConnection>
924924 new ( 148 , 01 , "ALTER TABLE `AniDB_Character` ADD `Type` int NOT NULL DEFAULT 0;" ) ,
925925 new ( 148 , 02 , "ALTER TABLE `AniDB_Character` ADD `LastUpdated` datetime NOT NULL DEFAULT '1970-01-01 00:00:00';" ) ,
926926 new ( 148 , 03 , DatabaseFixes . RecreateAnimeCharactersAndCreators ) ,
927+ new ( 149 , 1 , MySQLFixUTF8MB4 )
927928 } ;
928929
929930 private DatabaseCommand linuxTableVersionsFix = new ( "RENAME TABLE versions TO Versions;" ) ;
@@ -1474,4 +1475,46 @@ private static void MySQLFixUTF8()
14741475 }
14751476 }
14761477 }
1478+
1479+ private static void MySQLFixUTF8MB4 ( )
1480+ {
1481+ var settings = Utils . SettingsProvider . GetSettings ( ) ;
1482+ var sql =
1483+ "SELECT `TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME`, `DATA_TYPE`, `CHARACTER_MAXIMUM_LENGTH` " +
1484+ "FROM information_schema.COLUMNS " +
1485+ $ "WHERE table_schema = '{ settings . Database . Schema } ' " +
1486+ "AND collation_name = 'utf8_general_ci'" ;
1487+
1488+ using ( var conn = new MySqlConnection (
1489+ $ "Server={ settings . Database . Hostname } ;Port={ settings . Database . Port } ;User ID={ settings . Database . Username } ;Password={ settings . Database . Password } ;database={ settings . Database . Schema } ") )
1490+ {
1491+ var mySQL = ( MySQL ) Utils . ServiceContainer . GetRequiredService < DatabaseFactory > ( ) . Instance ;
1492+ conn . Open ( ) ;
1493+ var rows = mySQL . ExecuteReader ( conn , sql ) ;
1494+ if ( rows . Count > 0 )
1495+ {
1496+ foreach ( object [ ] row in rows )
1497+ {
1498+ var alter = "" ;
1499+ switch ( row [ 3 ] . ToString ( ) . ToLowerInvariant ( ) )
1500+ {
1501+ case "text" :
1502+ case "mediumtext" :
1503+ case "tinytext" :
1504+ case "longtext" :
1505+ alter =
1506+ $ "ALTER TABLE `{ row [ 1 ] } ` MODIFY `{ row [ 2 ] } ` { row [ 3 ] } CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'";
1507+ break ;
1508+
1509+ default :
1510+ alter =
1511+ $ "ALTER TABLE `{ row [ 1 ] } ` MODIFY `{ row [ 2 ] } ` { row [ 3 ] } ({ row [ 4 ] } ) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'";
1512+ break ;
1513+ }
1514+
1515+ mySQL . ExecuteCommand ( conn , alter ) ;
1516+ }
1517+ }
1518+ }
1519+ }
14771520}
0 commit comments