Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation ‘<

Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation ‘<>’@TOC

项目场景:

Windows环境下利用python脚本连接远程mysql数据库,用source命令插入数据


问题描述:

windows环境下利用python的Popen函数,连接远程数据库,用source执行特定的sql完成数据的插入,但是当执行到source环节时,程序抛出了一个错误: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation ‘<>’

select * from a  where tid>=100001 and tid<200001 and CaseFrom='招商网';

原因分析:

在这里插入图片描述
我翻译了一下大概明白了什么意思,大概意思是条件,就是因为编码的原因,我理解为两个条件所用的编码需要统一,从翻译来看因为UTF8编码无法隐式的转换,因为我的条件中有汉字,我生成的sql文件为UTF-8格式的,所以source 时windows默认的编码为GBK的导致,或者因为条件的内容为汉字导致的,接下来我需要统一编码


解决方案:


1. 更改生成的sql文件格式,此问题能解决
弊端: 因为UTF8的字符集比GBK要大不是所有的条件都包含在GBK,所以不推荐用这种办法

2. 更改连接数据库时的编码为utf8,此问题能解决,推荐用这种方式

在这里插入图片描述


mysql -h{host} -P{port} -u{user} -p{passowrd} --default-character-set=utf8


3. 利用convert更改汉字条件的编码,此问题的报错能解决,但是条件失去了作用,不能解决功能性问题,不推荐使用


select * from a where tid>=100001 and tid<200001 and CaseFrom=convert(‘招商网’ using utf8)

总结:

推荐使用第二种方式,简单方便
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值