`
sharong
  • 浏览: 493350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
D1667ae2-8cfc-3b68-ac7c-5e282789fa4a
论开源
浏览量:8720
7eb53364-fe48-371c-9623-887640be0185
Spring-data-j...
浏览量:13059
社区版块
存档分类
最新评论

MySQL5.x的一类SQL Error: 1267问题的解决方法

阅读更多
最近在使用MySQL5.x时,用到了两个表的组合查询,类似下面简单的语句:
select pa.userId as userId,pa.userName as userName,pb.orgId as orgId,pb.orgName as orgName from tbl_user pa,tbl_org pb where pa.userId = pb.userId

结果却出现了下面的错误:
SQL Error: 1267, SQLState: HY000
[@APPNAME@] ERROR [http-8080-2] JDBCExceptionReporter.error(104) | Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
org.hibernate.exception.GenericJDBCException: could not execute query using iterate	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException
(SQLStateConverter.java:103)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.hql.QueryLoader.iterate(QueryLoader.java:427)
	at org.hibernate.hql.ast.QueryTranslatorImpl.iterate(QueryTranslatorImpl.java:380)
... ...

这个问题仅仅在自己家里的机器上的MySQL本地数据库中出现,在公司的服务器数据库上则不会出现。因为之前一直在用oracle数据库,MySQL相对接触较少,连续几天这个问题都没有解决,只是觉得这个问题太过莫名其妙了,百思不得其解。
大概到了第3天吧,突然明白了错误提示的意思,这意思是在说utf8_general_ci和utf8_unicode_ci由于隐含的字符集不同,不能用'='进行判断。
立即用客户端软件SQLyog连接到数据库,检查创建数据库表的语句,果然发现下面的小小区别
CREATE TABLE `tbl_user` (
  `userid` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) DEFAULT '0',
... ...
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `tbl_org` (
  `orgid` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) DEFAULT '0',
... ...
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

注意两条语句最后的COLLATE后面的那一点,一个是utf8_unicode_ci,而另一个是utf8_general_ci,这里描述的是数据库校对规则,由于两个表这里的差异,造成了上面的错误。
删除其中的一个表,重新创建之,使二者数据库校对规则一致后,问题解决。
分享到:
评论

相关推荐

    jdbc-mysql-connector-j-8.0.31.jar jdbc-sqljdbc41.jar

    在IT行业中,数据库接口自动化测试是一项至关重要的任务,它能够有效地确保系统的稳定性和数据的一致性。...在实际工作中,这样的自动化测试方案有助于提前发现并解决问题,提高软件质量和开发效率。

    mysql-connector-java-8.0.19.zip驱动下载window和liux

    MySQL是世界上最受欢迎的开源数据库系统之一,而MySQL Connector/J是MySQL官方提供的用于Java应用程序与MySQL数据库之间连接的驱动程序。本文将深入探讨MySQL Connector/J 8.0.19版本在Windows和Linux操作系统中的...

    解决SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded_runtimeerror怎么修复

    在MySQL数据库操作中,"SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded" 是一个常见的错误,它意味着在执行事务时,系统等待锁定资源的时间超过了预设的限制。这个错误通常发生在并发环境中,当...

    com.mysql.cj.jdbc.driver驱动下载

    解压后,通常会得到一个名为`mysql-connector-java-x.x.x.jar`的文件,其中x.x.x代表具体的版本号。将这个JAR文件添加到项目的类路径(classpath)中,可以通过以下几种方式实现: 1. 如果是IDE如Eclipse或IntelliJ...

    Unity MySql所需要的DLL

    5. **System.Data.dll**:这是.NET Framework的一部分,包含了ADO.NET的基础类,如SqlConnection、SqlCommand等,用于与各种数据库(包括MySQL)进行数据交互。在Unity中,这个库通常与mysql.data.dll一起使用,构建...

    mysql 5.1.46 最新驱动 jar包

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其5.1.46版本的驱动程序是连接Java应用程序与MySQL数据库的关键组件。这个jar包(Java Archive)包含了所有必要的类和库,使得Java开发者能够通过JDBC(Java ...

    MysqlLog.rar

    此外,通过日志,还可以追踪到数据库中的异常行为,比如重复的数据插入或更新,这有助于及时发现并解决问题。 总的来说,"MysqlLog.jar"是一个强大的工具,它提供了对MySQL数据库的透明化监控,帮助开发人员深入...

    MySQLDBA运维笔记.pdf

    mysql 总结........................................................................................................................................6 1.1 数据库的种类.......................................

    在Eclipse中用JDBC连接MySQL数据库!.txt

    #### 三、常见问题及解决方法 1. **连接失败问题:** - 错误提示:`ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)` - 解决方案: - 确保MySQL服务正在运行。 - 检查端口号是否正确。 - ...

    VS2005使用MYSQL++需要的mysqlpp.lib

    它提供了一套方便的C++类和函数,使得开发人员能够用C++编写SQL语句,处理结果集,以及执行其他常见的数据库操作。 标题"VS2005使用MYSQL++需要的mysqlpp.lib"指出,为了在VS2005项目中使用MYSQL++,你需要一个名为...

    mysql中异常错误ERROR:2002的解决方法

    下面我们将详细探讨这个问题的原因以及相应的解决方法。 首先,当遇到此错误时,第一步应确认MySQL服务是否已启动。可以通过运行`/etc/rc.d/init.d/mysqld status`来检查MySQL的状态。如果MySQL未启动,尝试使用`...

    jdbc连接mysql驱动包.rar

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而JDBC(Java Database Connectivity)是Java语言与各种数据库进行交互的一种标准接口。本资源"jdbc连接mysql驱动包.rar"包含了两个MySQL的Java驱动程序,即`...

    mysql.rar_mysql 类_mysql类

    2. **查询执行**:一个完整的`mysql类`会包含用于执行SQL查询的方法,例如`query()`,可以接收SQL语句作为参数,返回查询结果或处理错误。 3. **结果处理**:为了方便开发者,类可能提供处理查询结果的方法,如`...

    MySQL复制出错 Last_SQL_Errno:1146的解决方法

    - 定期检查主从一致性,及时发现并解决问题。 综上所述,解决MySQL复制出错Last_SQL_Errno:1146的关键在于理解表空间操作的流程,以及如何在从库上恢复缺少的表结构。通过合理规划、备份和使用适当的工具,可以...

    mysql-jdbc.jar

    这个JAR(Java Archive)文件包含了Java语言与MySQL数据库进行交互所需的类和资源,使得开发人员能够通过Java Database Connectivity (JDBC) API来执行SQL语句,管理MySQL数据库。 JDBC是Java平台的标准接口,它...

    mysql.class.php.zip_mysql.class.php_php mysql class

    2. **错误处理**:为了增强健壮性,这个类可能包含错误处理机制,比如 `connect_error()` 方法,用于检查连接过程中是否出错,并返回错误信息。 3. **查询执行**:一个常见的功能是执行 SQL 查询,如 `query()` ...

    qt5.13 64位msql驱动相关文件.rar

    在本案例中,我们关注的是其与MySQL数据库的集成,这涉及到一系列的库文件和驱动,使得Qt应用程序能够与MySQL数据库进行通信。MySQL驱动是Qt数据库模块的重要组成部分,它允许开发者在Qt应用中执行SQL查询并处理结果...

    mysql-connector-java-8.0.23.jar

    MySQL Connector/J 8.0.23 是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,允许Java开发者在他们的应用中使用MySQL数据库。这个驱动包是MySQL官方...

    C++连接MySQL的相关库和头文件

    - `mysql_connection.h`:定义了`sql::mysql::MySQL_Driver`类和`sql::Connection`类,用于管理数据库连接。 - `sql_exception.h`:包含了处理SQL异常的类,如`sql::SQLException`。 4. **使用示例**: ```cpp ...

    新手学习,php7中mysql数据库操作类实例,非常清晰易懂

    在PHP7中,MySQL数据库操作通常使用mysqli或PDO_MySQL扩展进行,但对于新手来说,创建一个封装好的数据库操作类可以简化很多工作。这个实例主要介绍如何构建一个PHP7中的MySQL数据库操作类,以实现连接、查询、插入...

Global site tag (gtag.js) - Google Analytics