mysql 1267 非法混合了校对 错误解决思路

今天写了一个mysql批量处理数据的存储过程,大致如下

DELIMITER $$

USE `etb`$$

DROP PROCEDURE IF EXISTS `proc_exp_formp`$$

CREATE PROCEDURE `proc_exp_formp`()
    READS SQL DATA
    COMMENT '定时获取数据进行发送公众号操作'
BEGIN
        DROP TABLE IF EXISTS tmp_table;
        CREATE TEMPORARY TABLE tmp_table(id INT,opid INT,plate VARCHAR(30),uid int,icode...);

 INSERT INTO tmp_table(id,opid,plate,...)
        SELECT pn.id,po.id opid,plate,... FROM bx_products pn,bx_product_order po 
        WHERE pn.id=po.pid ;

        UPDATE tmp_table tmp,bx_user_ssid ssid SET wxid=weixin_openid WHERE uid=user_id AND tmp.icode=ssid.icode;
           SELECT * FROM tmp_table;
    END$$

DELIMITER ;

存储过程的修改操作等都没提示错误,然后在call proc_exp_formp();

抛出错误:1267 SQLSTATE: HY000 (ER_CANT_AGGREGATE_2COLLATIONS)

中文意思:非法混合了校对

检查发现是update 语句有问题。

-->一开始换衣是语句错误,然后见了一个实体表来测试,没问题;

-->以为是字段匹配出现问题,将临时表字段和实体表的字段设置成一模一样,还是错误;

-->最后错误既然提示“校对”字眼,那就可能是编码,检查发现实体表的编码确实可能有问题,用了utf8_unicode_ci做校对,改成utf8_general_ci还是有问题;

-->好吧,怀疑到临时表可能也是需要编码才行,建表语句加上: DEFAULT CHARSET=utf8。

搞定。

 

小结:mysql建立的临时表,可能会存在用默认的西方其他编码,与实体表校对不上。

转载于:https://my.oschina.net/u/3277252/blog/997861

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值