SqlSugar 连接MySql 8.0.29报错
Posted v空空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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批量修改数据表和数据表中所有字段的字符集
SqlSugar ORM已经支持读写分离
目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能
用例讲解
using (var db = new SqlSugarClient("主连接字符串", "从连接字符串","可以多个从连接")) { var list= db.Queryable<Student>().ToList();//走从 var list= db.Queryable<Student>().ToJson();//走从 db.Insert(new Student() { name="写入" });//走主 db.Delete(new Student() {id=1 });//走主 db.BeginTran //事务内操作都是主 }
说明
/// <summary> /// 初始化 SqlSugarClient 类的新实例(主从模式) /// </summary> /// <param name="masterConnectionString">主:写入事务等操作</param> /// <param name="slaveConnectionString">从:无事务读取</param> public SqlSugarClient(string masterConnectionString,params string [] slaveConnectionString) : base(masterConnectionString, slaveConnectionString) { ConnectionString = masterConnectionString; }
注意:
ORM是完美支持了主从分离,但是您还需要设置您的数据库开启主从同步才可以,例如SqlServer有alwayson等技术。
如果您还不了解SqlSugar ORM请查看 http://www.codeisbug.com/Home/Doc?typeId=7
以上是关于SqlSugar 连接MySql 8.0.29报错的主要内容,如果未能解决你的问题,请参考以下文章