重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、DTS数据同步报错
目前成都创新互联已为成百上千家的企业提供了网站建设、域名、网络空间、成都网站托管、企业网站设计、丹江口网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
2、源端用户user1拥有所有database的权限,包括select权限
3、使用user1用户登录源端MySQL,当指定database为database1,select被拒绝
4、从MySQL的物理表文件看,表的.frm和.ibd文件是正常的
5、将报错的表table1备份为table2,删除table1,select information_schema.columns、information_schema.tables可执行且不报错
6、将table2重命名为table1,select information_schema.columns、information_schema.tables再次报一样的错误
7、将table1重命名为table2,select information_schema.columns、information_schema.tables可执行且不报错
8、原因判断
参考:
其他用户也遇到了与MySQL对象相关的information_schema.columns、information_schema.tables的select报错,但是涉及的MySQL对象为view,而我们这里为table。
view可以指定definer等,而table1的创建语法中没有找到这样的字眼。但是推测以某一种方式与definer相关联。
9、辅证
你分析的对的:因为B表的主键id是int类型的,你传递的条件是一个字符串。mysql在查询的时候回强制转换字符,将字符串转为4,如果你的字符串第一个字符不是数字的话应该是差不错来的。
如有以下sql:
T1.limit_user 为account表中查询出来的值
‘9,8,4’
查询sql正确查询结果应为:
不可推荐 ,推销客户,推销客户
实际结果为:
不可推荐
原因:
在mysql中in里面如果是字符串的话,会自动转化成int类型的,内部使用了如下方法: CAST('4,3' AS INT)
导致’4,3‘ 变成了4,所以上述查询sql结果只有第一个。
解决方案
FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')
正确的sql
我们经常在运行MySQL时会出一些错误,也经常被这些错误搞得晕头转向。当然解决这些问题的首要任务是找到日志信息。
MySQL的错误信息是在data目录下的,且文件名为hostname.err(hostname指的是主机名),但由于每个人安装的环境不一样,或你忘记了data目录的所在位置,你可以通过下面方法查找。
#hostname //获得主机名
hostname
#find / -name hostname.err
.....
#cd ...
#vi hostname.err