I have a docker container with a mysql:8.0
. At the very first launch (creating the container and volume), I run initial sql scriprt for create database, in which Default collation: utf8mb4_0900_ai_ci and Default characterset: utf8mb4. I am trying to create a new table using migration:
[Migration(0)]
public class Migration20231122190000 : Migration
{
public override void Down()
{
Delete.Table("users");
}
public override void Up()
{
Create.Table("users")
.WithColumn("Id").AsString(38).PrimaryKey()
.WithColumn("Login").AsString(30).Unique()
.WithColumn("Password").AsString(255)
.WithColumn("CounteragentId").AsString(38).ForeignKey("Counteragent", "Id");
}
}
But when running the migration runner.MigrateUp();
I get the following error: Referencing column 'CounteragentId' and referenced column 'Id' in foreign key constraint 'FK_users_CounteragentId_counteragents_Id' are incompatible.
Experimentally, exporting a new users
table created using migration, without a foreign key, I found out that FluentMigrator sets a characterset and collation for each column:
CREATE TABLE `users` (
`Id` varchar(38) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`Login` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`Password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`CounteragentId` varchar(38) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `IX_users_Login` (`Login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
select @@character_set_server
gives me utf8mb4
I know that I can add .AsCustom("varchar(255)")
in the migration code, but you know, it's not very convenient to use such a construction for each column.
What do I need to do so that FluentMigrator does not complement each column with the CHARACTER SET and COLLATE construction, but uses the default server settings, for example CounteragentId varchar(38) NOT NULL
or CounteragentId varchar(38) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL
?