SqlSugar 连接MySql 8.0.29报错

一、背景

从公司服务器Mysql(版本:8.0.16)导出数据库表结构和数据,再我本地电脑Mysql(版本:8.0.29) 还原,打算开启爆肝模式。结果刚启动项目就提示SqlSugar数据库连接报错。提示错误如下:

执行 Db.Ado.CheckConnection() 报错
English Message : Connection open error . The given key ‘0’ was not present in the dictionary.
Chinese Message : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:The given key ‘0’ was not present in the dictionary…


注:连接字符串:database=stocks;server=127.0.0.1;port=3306;uid=root;pwd=123;

同样的源代码,连接公司服务器Mysql运行无问题,连接本地Mysql运行就提示报错,简直神奇。经各种分析,主要问题是连接字符串中需添加字符编码。。。详见解决方案

接下来是个别表查询报错问题

个别表执行查询 this.DB.Queryable().Where(p=>true).ToList() 报错。主要是ToList()报错,经分析,主要问题是当前表字段字符集 和 排序规则不统一。报错如下:
MySql.Data.MySqlClient.MySqlException:“Fatal error encountered attempting to read the resultset.”
内部异常MySqlException: Expected end of data packet

执行MySQL批量修改数据表和数据表中所有字段的字符集,即可解决此问题。详见解决方案

二、解决方案

1.解决连接报错方式

添加 charset=utf8mb4 ,连接不再报错。注意:要utf8mb4,我在本地用utf8,仍然报错。

database=stocks;server=127.0.0.1;port=3306;uid=root;pwd=123;charset=utf8mb4;

2.修改数据库字符集不统一问题

按需执行下面Sql 脚本就行。

(1)更改某表编码(字符集)和表中所有字段的编码(字符集):

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
·TABLE_NAME 替换成你所需表名·

(2)更改所有的表编码(字符集)和表中所有字段的编码(字符集):

SELECT
	CONCAT(
		'ALTER TABLE ',
		TABLE_NAME,
		' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
	)
FROM
	information_schema.`TABLES`
WHERE
	TABLE_SCHEMA = 'DATABASE_NAME';
·DATABASE_NAME 替换成你所需数据库名·

三、其他内容

查询某个数据库所有表名的语句:

SHOW FULL COLUMNS FROM TABLE_NAME;
·TABLE_NAME 替换成你所需表名·

引用:
[1] MySQL批量修改数据表和数据表中所有字段的字符集

猜你喜欢

转载自blog.csdn.net/piao110liang/article/details/126535975