Pomelo.EntityFrameworkCore.MySql icon indicating copy to clipboard operation
Pomelo.EntityFrameworkCore.MySql copied to clipboard

MariaDb `uuid`-type: COLLATION 'ascii_general_ci' is not valid ...

Open kirides opened this issue 1 year ago • 1 comments

Steps to reproduce

Using MariaDb 10.7.8

public class Entity
{
    public Guid Id { get; set; }
    public Guid? ParentId { get; set; }
}
// ...

public void Configure(EntityTypeBuilder<Entity> builder)
{
	builder.Property(n => n.Id)
		.IsRequired()
		.HasColumnName("id");

	builder.Property(n => n.ParentId)
		.HasColumnType("uuid")
		.HasColumnName("parent_id");
}

The issue

Having a Guid with sometimes representing it as 'uuid' and sometimes the default of 'char(36)' leads to mal-formed Sql that tries to apply the collation ascii_general_ci to the MariaDb uuid type which is not supported.

i suggest not inserting the default ascii_general_ci if the ColumnType is not a char(-like) type.

Exception message:
Stack trace:

MySqlConnector.MySqlException (0x80004005): COLLATION 'ascii_general_ci' is not valid for CHARACTER SET 'binary'
   at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 43
   at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 130
   at MySqlConnector.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, Activity activity, I
OBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 468
   at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList`1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken)
 in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
   at MySqlConnector.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 296
   at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 107
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

Further technical details

MySQL version: MariaDb 10.7.8 Operating system: Windows 10 22H2 Pomelo.EntityFrameworkCore.MySql version: 6.0.2 Microsoft.AspNetCore.App version: net6.0

Other details about my project setup:

kirides avatar Apr 14 '23 15:04 kirides

Probably related to #1711

nkelemen18 avatar Aug 15 '23 14:08 nkelemen18