MySqlConnector.MySqlException 带有重音符号的键 PRIMARY 的重复条目
MySqlConnector.MySqlException Duplicate entry for key PRIMARY with accents
在 MariaDB 数据库 (10.6) 上,我遇到以下错误,其中的键值不同:
MySqlConnector.MySqlException : 'Duplicate entry 'GUÈN10' for key 'PRIMARY''
当我检查插入的数据时,我发现没有其他重复数据,只有一个没有重音符号:'GUEN10'.
似乎 PRIMARY KEY 比较忽略了重音。
数据库由脚本创建:
CREATE DATABASE IF NOT EXISTS foo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后使用 EFcore 创建表:
// Global builder
modelBuilder.HasCharSet("utf8mb4", DelegationModes.ApplyToAll);
// Entity builder
builder.HasCharSet("utf8mb4", true);
如果我检查 information_schema 我可以看到该列是用正确的 charset/collate:
创建的
COLUMN_NAME CHARACTER_SET_NAME COLLATION_NAME
-------------------- -------------------- --------------------
EntityId utf8mb4 utf8mb4_general_ci
插入是用一个 MySqlCommand 完成的,我用 SET NAMES 'utf8mb4';
作为前缀。
我也试过 utf8mb3 / utf8mb3_general_ci,这是数据库的默认值,但没有成功。
如何修复 PRIMARY KEY 比较以考虑重音?
10.6 中的 utf8mb4 ci 归类不处理(区分大小写的)重音。您要么必须使用二进制排序规则,要么等待 MariaDB 10.8 使用区分重音的排序规则。
MySQL 8.0 已经支持 utf8mb4_0900_as_cs 排序规则。
另请参阅:MDEV-20912, MDEV-27009
在 MariaDB 数据库 (10.6) 上,我遇到以下错误,其中的键值不同:
MySqlConnector.MySqlException : 'Duplicate entry 'GUÈN10' for key 'PRIMARY''
当我检查插入的数据时,我发现没有其他重复数据,只有一个没有重音符号:'GUEN10'.
似乎 PRIMARY KEY 比较忽略了重音。
数据库由脚本创建:
CREATE DATABASE IF NOT EXISTS foo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后使用 EFcore 创建表:
// Global builder
modelBuilder.HasCharSet("utf8mb4", DelegationModes.ApplyToAll);
// Entity builder
builder.HasCharSet("utf8mb4", true);
如果我检查 information_schema 我可以看到该列是用正确的 charset/collate:
创建的COLUMN_NAME CHARACTER_SET_NAME COLLATION_NAME
-------------------- -------------------- --------------------
EntityId utf8mb4 utf8mb4_general_ci
插入是用一个 MySqlCommand 完成的,我用 SET NAMES 'utf8mb4';
作为前缀。
我也试过 utf8mb3 / utf8mb3_general_ci,这是数据库的默认值,但没有成功。
如何修复 PRIMARY KEY 比较以考虑重音?
10.6 中的 utf8mb4 ci 归类不处理(区分大小写的)重音。您要么必须使用二进制排序规则,要么等待 MariaDB 10.8 使用区分重音的排序规则。
MySQL 8.0 已经支持 utf8mb4_0900_as_cs 排序规则。
另请参阅:MDEV-20912, MDEV-27009