一、背景
从公司服务器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 替换成你所需数据库名·
三、其他内容
查询某个数据库所有表名的语句:文章来源:https://www.toymoban.com/news/detail-595731.html
SHOW FULL COLUMNS FROM TABLE_NAME;
·TABLE_NAME 替换成你所需表名·
引用:
[1] MySQL批量修改数据表和数据表中所有字段的字符集文章来源地址https://www.toymoban.com/news/detail-595731.html
到了这里,关于SqlSugar 连接MySql 8.0.29报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!