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)更改所有的表编码(字符集)和表中所有字段的编码(字符集):
SELECTCONCAT('ALTER TABLE ',TABLE_NAME,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')FROMinformation_schema.`TABLES`WHERETABLE_SCHEMA = 'DATABASE_NAME';·DATABASE_NAME 替换成你所需数据库名·
三、其他内容
查询某个数据库所有表名的语句:
SHOW FULL COLUMNS FROM TABLE_NAME;·TABLE_NAME 替换成你所需表名·
引用:
[1] MySQL批量修改数据表和数据表中所有字段的字符集
来源地址:https://blog.csdn.net/piao110liang/article/details/126535975
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341