最近在使用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,这里描述的是数据库校对规则,由于两个表这里的差异,造成了上面的错误。
删除其中的一个表,重新创建之,使二者数据库校对规则一致后,问题解决。
分享到:
相关推荐
在IT行业中,数据库接口自动化测试是一项至关重要的任务,它能够有效地确保系统的稳定性和数据的一致性。...在实际工作中,这样的自动化测试方案有助于提前发现并解决问题,提高软件质量和开发效率。
MySQL是世界上最受欢迎的开源数据库系统之一,而MySQL Connector/J是MySQL官方提供的用于Java应用程序与MySQL数据库之间连接的驱动程序。本文将深入探讨MySQL Connector/J 8.0.19版本在Windows和Linux操作系统中的...
在MySQL数据库操作中,"SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded" 是一个常见的错误,它意味着在执行事务时,系统等待锁定资源的时间超过了预设的限制。这个错误通常发生在并发环境中,当...
解压后,通常会得到一个名为`mysql-connector-java-x.x.x.jar`的文件,其中x.x.x代表具体的版本号。将这个JAR文件添加到项目的类路径(classpath)中,可以通过以下几种方式实现: 1. 如果是IDE如Eclipse或IntelliJ...
5. **System.Data.dll**:这是.NET Framework的一部分,包含了ADO.NET的基础类,如SqlConnection、SqlCommand等,用于与各种数据库(包括MySQL)进行数据交互。在Unity中,这个库通常与mysql.data.dll一起使用,构建...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其5.1.46版本的驱动程序是连接Java应用程序与MySQL数据库的关键组件。这个jar包(Java Archive)包含了所有必要的类和库,使得Java开发者能够通过JDBC(Java ...
此外,通过日志,还可以追踪到数据库中的异常行为,比如重复的数据插入或更新,这有助于及时发现并解决问题。 总的来说,"MysqlLog.jar"是一个强大的工具,它提供了对MySQL数据库的透明化监控,帮助开发人员深入...
mysql 总结........................................................................................................................................6 1.1 数据库的种类.......................................
- 定期检查主从一致性,及时发现并解决问题。 综上所述,解决MySQL复制出错Last_SQL_Errno:1146的关键在于理解表空间操作的流程,以及如何在从库上恢复缺少的表结构。通过合理规划、备份和使用适当的工具,可以...
#### 三、常见问题及解决方法 1. **连接失败问题:** - 错误提示:`ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)` - 解决方案: - 确保MySQL服务正在运行。 - 检查端口号是否正确。 - ...
它提供了一套方便的C++类和函数,使得开发人员能够用C++编写SQL语句,处理结果集,以及执行其他常见的数据库操作。 标题"VS2005使用MYSQL++需要的mysqlpp.lib"指出,为了在VS2005项目中使用MYSQL++,你需要一个名为...
下面我们将详细探讨这个问题的原因以及相应的解决方法。 首先,当遇到此错误时,第一步应确认MySQL服务是否已启动。可以通过运行`/etc/rc.d/init.d/mysqld status`来检查MySQL的状态。如果MySQL未启动,尝试使用`...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,而JDBC(Java Database Connectivity)是Java语言与各种数据库进行交互的一种标准接口。本资源"jdbc连接mysql驱动包.rar"包含了两个MySQL的Java驱动程序,即`...
2. **查询执行**:一个完整的`mysql类`会包含用于执行SQL查询的方法,例如`query()`,可以接收SQL语句作为参数,返回查询结果或处理错误。 3. **结果处理**:为了方便开发者,类可能提供处理查询结果的方法,如`...
这个JAR(Java Archive)文件包含了Java语言与MySQL数据库进行交互所需的类和资源,使得开发人员能够通过Java Database Connectivity (JDBC) API来执行SQL语句,管理MySQL数据库。 JDBC是Java平台的标准接口,它...
2. **错误处理**:为了增强健壮性,这个类可能包含错误处理机制,比如 `connect_error()` 方法,用于检查连接过程中是否出错,并返回错误信息。 3. **查询执行**:一个常见的功能是执行 SQL 查询,如 `query()` ...
在本案例中,我们关注的是其与MySQL数据库的集成,这涉及到一系列的库文件和驱动,使得Qt应用程序能够与MySQL数据库进行通信。MySQL驱动是Qt数据库模块的重要组成部分,它允许开发者在Qt应用中执行SQL查询并处理结果...
在PHP7中,MySQL数据库操作通常使用mysqli或PDO_MySQL扩展进行,但对于新手来说,创建一个封装好的数据库操作类可以简化很多工作。这个实例主要介绍如何构建一个PHP7中的MySQL数据库操作类,以实现连接、查询、插入...
- `mysql_connection.h`:定义了`sql::mysql::MySQL_Driver`类和`sql::Connection`类,用于管理数据库连接。 - `sql_exception.h`:包含了处理SQL异常的类,如`sql::SQLException`。 4. **使用示例**: ```cpp ...