MySQL的Illegal mix of collationsy异常原因和解决方法

MySQL的Illegal mix of collationsy异常原因和解决方法

 

原创 2008年12月25日 11:54:00
 

 今天在使用数据库临时表的游标时,发现了这个异常。
经查找资料,最终结果。这里和大家分享一下。 字符集问题还是一定要统一的才是最简单的。

create temporary table temp2(mc1 varchar(20) default ”,mc2 varchar(20)default ”,mc3 varchar(20)default ”,mc4 varchar(20)default ”,mc5 varchar(20)default ”,parentid varchar(20),levelnum int); — 生成临时表

declare mycur67 CURSOR for select concat(replace(space(levelnum-1),space(1),’——‘),mc1,mc2,mc3,mc4,mc5) as mc,parentid as location from temp2;

异常信息为:
Illegal mix of collations for operation ‘concat’

将concat的代码去掉后面的部分内容,运行结果为
declare mycur67 CURSOR for select concat(replace(space(levelnum-1),space(1),’——‘),mc1) as mc,parentid as location from temp2;

错误:Illegal mix of collations (utf8_general_ci,COERCIBLE) and (gb2312_chinese_ci,IMPLICIT) for operation ‘concat’

可见,是2个字段的编码类型不一致造成的。

原来我的数据库创建时,选择的是gb2312编码,而字段操作默认为UTF8的编码。 绝对统一使用UTF-8

create temporary table temp2(mc1 varchar(20) default ”,mc2 varchar(20)default ”,mc3 varchar(20)default ”,mc4 varchar(20)default ”,mc5 varchar(20)default ”,parentid varchar(20),levelnum int)DEFAULT CHARSET=UTF8;

运行结果正常。

经查找资料,如下说的很清楚
mysql> show variables like “%character%”; show variables like “%collation%”; +————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)

+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)

fix it with
set collation_database=utf8_general_ci;
set collation_connection=utf8_general_ci;
set collation_server=utf8_general_ci;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113606.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 区块链–Arbitrum Rollup(Layer2)

    区块链–Arbitrum Rollup(Layer2)Arbitrum是OffchainLabs团队开发的以太坊Layer2层扩容方案,可以实现高吞吐量,让开发者以低成本部署、运营智能合约,同时可以保持无需信任的安全性总结:Rollup的主要特点是所有交易数据都记录在链上,也就是说,Arbitrum把关乎安全的部分放在以太坊链上,将实际计算和存储放在链下执行。

    2022年5月11日
    42
  • 什么是跨域?如何解决?

    什么是跨域?如何解决?一、什么是跨域?跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;二、跨域访问示例假设有两个网站,A网站部署在:.

    2022年5月20日
    52
  • IDEA下Log4j使用教程

    IDEA下Log4j使用教程 2015年12月14日15:30:21阅读数:13467Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些…

    2025年9月14日
    5
  • QMovie的简单使用「建议收藏」

    QMovie的简单使用「建议收藏」文章目录前言一、使用方法总结前言QT上用QMovie运行GIF图片简介TheQMovieclassisaconvenienceclassforplayingmovieswithQImageReader.More…Header: #includeqmake: QT+=guiInherits: QObject一、使用方法代码如下(示例):QLabellabel;QMovie*gif;gif=newQMovice(“:/picture/mygif.

    2022年6月17日
    86
  • 测试用例八大要素及额外十小要素

    测试用例八大要素及额外十小要素测试用例八大要素1.测试用例编号由字母、字符、数字组合而成的字符串,有唯一性,易识别性。eg:1)系统测试:产品编号-ST-系统测试项名-系统测试子项名-编号2)集成测试:产品编号-IT-集成测试项名-集成测试子项名-编号3)单元测试:产品编号-UT-单元测试项名-单元测试子项名-编号这样看到编号就可以知道是做的什么测试,测试的对象是什么,也方便维护。 2.测…

    2022年6月28日
    24
  • initramfs是什么_hdfs工作原理

    initramfs是什么_hdfs工作原理initramfs概述initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start,&__initramfs_end-&__initramfs_start,0)函数(解压缩、)解析、安装。

    2022年8月11日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号