MySQL迁移问题

文章讲述了在将数据库从旧系统迁移到新Windows2016系统时遇到的问题,包括GROUPBY分组错误(因SQL模式设置)和字符集不一致,以及访问地址报错的解决方法。
摘要由CSDN通过智能技术生成

一、背景

数据库需要迁移到另一台电脑,测试库,新的电脑Windows升级到2016,新旧两台电脑的MySQL数据库版本相同,但是出现了一些问题。

二、问题:测试项目原本连接的MySQL可以正常使用,但是切换连接后报错

2.1GROUP BY分组问题

报错: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xxx.xx’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因:这个错误是由于 MySQL 的 SQL 模式设置为 ONLY_FULL_GROUP_BY,它要求在使用 GROUP BY 语句时,SELECT 列表中的每个非聚合列都必须出现在 GROUP BY 子句中。
解决:

SELECT @@sql_mode;

#旧库
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#新库
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#更改新库的模式值
SET GLOBAL sql_mode = 
'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

然后重启项目。

2.2数据库字符集问题

报错:Incorrect string value: ‘\xE6\xB3\x89\xE5\xB1\xB1…’ for column ‘name’ at row 1
原因:字符集和排序规则不一致
解决:修改数据库的编码和原本的数据库保持一致。
在这里插入图片描述
如果使用了自定义函数,那么也应当保持字符集一致,旧库函数中返回字符集为’CHARSET utf8’,而新库需要使用’CHARSET utf8mb4’,即使两个库版本一致,但是不修改新库的字符集就会报错。

CREATE DEFINER=`root`@`%` FUNCTION `convertName`(P_NAME VARCHAR(255)) 
RETURNS varchar(255) CHARSET utf8mb4

utf8mb4 字符集支持更广泛的字符范围和更好的数据兼容性

SHOW CREATE FUNCTION convertName;
#复制Create function
#修改编码
#所有相关函数都修改编码为utf8mb4

三、访问报错

3.1访问地址报错

问题:访问的项目地址后多出一节"?exception.message=Error+decoding+flow+execution"
解决:清除浏览器数据,然后关闭重启浏览器,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值