MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题

Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

表更描述: 将mysql数据库中的worktask表添加ishaspic字段。

具体操作:(1)数据库worktask表新添是否有图片字段ishaspic;新添字段时,报错

[SQL] alter table WorkTask add ishaspic int(10) Null;
[Err] 1034 - Incorrect key file for table ‘WorkTask‘; try to repair it

解决方案:新建worktask表,添加ishaspic字段,将原worktask表中的数据插入新建表中.

(2)生产环境部署变更代码,应用启动后,一段时间后台报错

org.hibernate.exception.GenericJDBCException: Could not open connection

java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

(3)监控数据库服务,发现查询sql突然变慢,数据库服务器CPU资源占用率超高。

(4)变更回退,错误仍然存在。

原来应用能正常运行,现在不能正常运行,监控数据库,发现sql查询执行时间突然变慢,单独执行sql,发现也很慢,到达百秒级。

问题定位:在新建worktask表时,改变了表的排序规则,以至于使和所联表的排序规则不一样,导致联表查询SQL语句,索引不起作用。

解决方案:(1)将联表查询SQL进行拆分;(2)调整数据表的排序规则,保证所联表数据表的排序规则一致。

*************************************************************************************

MySQL中的排序规则。在新建MySQL数据库或表的时候经常会选择字符集和排序规则。数据库用的字符集大家都知道是怎么回事,那排序规则是什么呢?

排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:

1、 两个不同的字符集不能有相同的排序规则

2、 两个字符集有一个默认的排序规则

3、 有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary).

在MySQL数据库中,可以使用show collation来查看支持的各种排序呢规则,我用的是MySQL 5.6.12-log版本的数据库,支持219种排序规则。

时间: 2024-10-17 21:49:00

MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题的相关文章

MySql数据库字段排序规则不一致产生的一个问题

最近项目向MySql迁移,迁移完毕后,在获取用户权限时产生了一个异常,跟踪进去获取执行的语句如下, SELECT PermissionId FROM spysxtPermission WHERE (ResourceCategory = 'BaseUser' AND ResourceId = '003bf4bd072243fa90517ee2bc088cb7' AND Enabled = 1 AND DeletionStateCode = 0) UNION SELECT PermissionId

Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

Mysql中的排序规则utf8_unicode_ci.utf8_general_ci的区别总结 用了这么长时间,发现自己竟然不知道utf_bin和utf_general_ci这两者到底有什么区别.. ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a' 那么在utf8_bin中你就找不到 txt

更改SQL Server 数据库的排序规则

更改数据库的排序规则,SQL提示 5030 的错误,错误信息如下: The database could not be exclusively locked to perform the operation. 解决方法: 1.设置数据库的 Ristrict Access 为 SINGLE_USER. 2.执行下列语句更改排序规则 USE master GO ALTER DATABASE 'your db name' COLLATE Chinese_PRC_CI_AS GO 3.上述命令执行成功之

Windows下Java程序实现对Mysql数据库的插入,删除,修改和查询

运行环境:Windows7,Eclipse,MySql,JDK1.7,mysql-connector-java-5.1.17-bin.jar 1 //import java.io.*; 2 import java.util.*; 3 import java.sql.*; 4 5 /** 6 * 7 * @date 2014-05-20 8 * @author asif 9 * @作用 java实现对mysql数据库的增减删查 10 * @bug 插入,删除,更新的时候异常停止 11 * 12 *

MySQL字符集与排序规则 北京MySQL DBA学习

MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL实例的交互相关,排序规则和字符串的对比规则相关. 字符集的设置可以在MySQL实例.数据库.表.列四个级别.MySQL设置字符集支持在InnoDB.MyISAM.Memory三个存储引擎.查看当前MySQL支持的字符集的方式有两种,一种是通过查看information_schema.character_set系统表,一种是通过命令show character set查看每个指定的字符集都会有一个或多个支持的排

MSSQL 修改数据库的排序规则

1.修改数据库排序规则 ALTER DATABASE [CHARACTER] COLLATE Chinese_PRC_CI_AS ; 2.修改表中列的排序规则 如果下列其中之一当前正在引用一个列,则无法更改该列的排序规则. 计算列 索引 自动生成或由 CREATE STATISTICS 语句生成的分发统计信息 CHECK 约束 FOREIGN KEY 约束 --------------------------修改数据库表中字符型列的排序规则 ---------------------------

vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)

[编译中遇见的问题]       ①在用vc 6.0去调用MySQL中的数据时,出现中文乱码       ②不明白mysql中的码制 [开始解决问题]      ①打开mysql控制台        ②开始展示自己        ③打开vc 6.0(配置mysql环境在这里我就不哆嗦了) 走起.....在vc 6.0中复制下列代码,进行连接mysql和调用代码如下: #include <Windows.h>#include <stdio.h>#include <stdlib.

LocalDB数据库修改排序规则,修复汉字变问号

VS2012,VS2013新增的轻量级数据库LocalDB,有个这个,开发人员就不必再安装庞大的SQL server了,可以方便地测试运行小型项目:既然是轻量级数据库,它抛弃了庞大的身躯,功能上当然也会受到局限,其中之一就是它默认的排序规则,使用默认排序规则,从网站前台添加的中文数据在数据库中显示乱码或者变问号:这个问题困扰了我好几天时间,通过各种搜索,终于找到解决方案:特此转述,希望能帮到有同样困惑的您!1.右键数据库实例,新建查询修改数据库为单用户模式 alter database [数据库

SQL SERVER 数据库安装完毕之后如何修改数据库实例排序规则

背景 最近我们在azure portal 上开了几台英文版的数据库服务器,因默认是开启就安装好对应的数据库,所以存在一个实例排序规则的问题,需把整个实例都调整成Chinese_PRC_CI_AS,避免后续出现字符乱码之类的问题.之前只是知道可以调整,未实际操作过,这次把实际操作步骤记录一下,便于我们后续查阅. 环境情况 Microsoft SQL Server 2012 (SP3-CU8) (KB4013104) - 11.0.6594.0 (X64) Mar 15 2017 10:52:31