报错信息:
System.Collections.Generic.KeyNotFoundException: 'The given key was not present in the dictionary.'
报错代码:
sql = "select * from test_table;"
List<MyClass> mydata = new List<MyClass>();
using (IDbConnection connection = GetMySQLConnection())
{
mydata = connection.Query<MyClass>(sql).ToList();
}
情景还原:
原有代码连接的是Mysql A,可以正常工作,但将数据库切换到新的Mysql B后,同一套代码报如上错误。
判断:
代码没改动,那一定是两个数据库在配置上有差异。检查发现数据库B的my.cnf文件中设置了两个参数:
[mysqld]
init_connect='SET NAMES utf8mb4'
[client]
default-character-set=utf8mb4
而原有连接串指定的是charset=utf8,即
connection_string = "server=hostname;port=3306;user=xxx;password=123;database=test_db;Charset=utf8;"
解决:
- 连接串删掉charset=utf8, 或者
- 将连接串中的字符集改为和Mysql B一致,即Charset=utf8mb4
注:utf8mb4是utf8的一个超集