将现有MySQL数据库改为大小写不敏感

用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在。而Windows下的MySQL却是大小写不敏感的,所有表名和数据库名都会变成小写。

对于怎么启用或者停用MySQL数据库的大小写敏感,这个网上随便都能找到,就是改改参数lower_case_table_names,然后重启即可。

但是,如果我们的数据库中已经有了多个区分大小写的数据库,现在要改为不区分大小写的,那么就会报错:Table 'databasenamexxx.tablenamexxx' doesn't exist.

为此,我们需要将MySQL改为大小写敏感的模式,然后去重命名每个表名和数据库名。

MySQL确实很神奇的一点是不允许重命名数据库,所以如果我们要重命名Test1为test1,那么只有新建一个test1的数据库,然后把Test1中的表全面rename到test1数据库中。

而且在rename的过程中,我们也需要将表面从大小写的形式改为全部小写的形式。

为了批量的做这么一件事,与,我写了一个存储过程,通过读取系统表,获得数据库表名,然后用游标的方式依次执行rename操作。

DELIMITER //

CREATE PROCEDURE renametables(olddb VARCHAR(50),newdb VARCHAR(50))
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE tmp VARCHAR(100); -- 定义局部变量

DECLARE tbcur CURSOR
    FOR    SELECT TABLE_NAME FROM `information_schema`.`TABLES` WHERE table_schema=olddb AND Table_Type='BASE TABLE';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    OPEN tbcur;  -- 打开游标

    REPEAT
     FETCH tbcur INTO tmp;
     IF done=0
     THEN
      SET @sqlstring=CONCAT( 'RENAME TABLE ',olddb,'.`',tmp,'` TO ',newdb,'.`',LOWER(tmp),'`;');
      SELECT @sqlstring; -- 这一句可以不要,只是打印我们拼接后要运行的SQL是什么
      PREPARE s1 FROM  @sqlstring; -- 执行拼接出来的SQL
      EXECUTE s1;
      DEALLOCATE PREPARE s1;
    END IF;
     UNTIL done END REPEAT;
    CLOSE tbcur; -- 关闭游标,释放游标使用的所有内部内存和资源 

    END// 

 

    
我们在新数据库中建立了该存储过程,然后调用即可:

CALL renametables('Test1','test1')

这样所有Test1中的大小写混合的表,就全部转换到了test1数据库中,而且表名都变成了小写了。

一个一个的数据库去这么做,然后再把MySQL的参数改为大小写不敏感,这样才能正常使用。

这里我只是做了表的迁移,接下来存储过程和视图的迁移,由于不涉及到数据,所以比较简单,找到当年的DDL或者我们在大小写敏感的时候就导出View和存储过程的定义,然后用文本编辑器把整个SQL变成小写的,然后到新数据库中去执行,重新创建即可。

时间: 2024-12-22 01:09:28

将现有MySQL数据库改为大小写不敏感的相关文章

MYSQL查询大小写是否敏感问题分析

mysql数据库在做查询的时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的.    1. 什么是字符集和校验规则? 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则.任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则.要想列出一个字符集的校对规则,使用SHOW COLLATION语句. 校对规则一般有这些特征: 两个不同的字符集不能有相同的校对规则. 每个字符集有一个默认校对规则.例如

qt-如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新

问题描述 如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新 本人是个菜鸟在做一个简单的同学录系统,这是进入之后的界面 我想实现鼠标选取一个表格点击"修改同学信息"之后能对它在修改并且修改确定后能同步刷新MySQL数据库而且表格中的数据也更新. 下面是我的代码:#include ""record.h""#include ""ui_record.h""#include &qu

Mysql数据库名和表名的大小写敏感性问题

在 MySQL 中,数据库和表对应于那些目录下的目录和文件.因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的.一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时.然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样.查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展. 注意:尽管在 Win

数据库-小白 求大神解答 eclipse连接mysql语句改成连接sql2008

问题描述 小白 求大神解答 eclipse连接mysql语句改成连接sql2008 package library; import javax.swing.*; import java.sql.*; public class Database{ private String url = "jdbc:mysql://localhost/library";// //private String url = "jdbc:mysql://localhost:3306/library&

写一个mysql数据库的sql 递归查询,我现在有个能查询三级的,谁能帮我改为查询四级或五级的

问题描述 select distinct * from (select * from news_types where news_types.id=1 union select n2.* from news_types n1,news_types n2 where n1.id=1 and n2.parentid=n1.id union select n3.* from news_types n3,( select n2.* from news_types n1,news_types n2 whe

关于将access数据库改为mysql数据库

问题描述 关于将access数据库改为mysql数据库 我有一个基于Java用NetBeans平台写的图书管理系统,连接的是access数据库,哪位大神能帮我改为连接mysql数据库.感激不尽. 解决方案 参考:http://www.williamlong.info/archives/1057.htmlhttp://wenku.baidu.com/link?url=rB09dWq0embYGSS_VUheHzsOFQvN5v237JkxMC97_tLI2Utf6bsfH7T9lc2gvZSB8M

spring配置ibatis oracle数据库改成mysql数据库遇到数据库方言问题

问题描述 spring配置ibatisoracle数据库改成mysql数据库遇到数据库方言问题<!--spring配置ibatis--><beanid="sqlMapClient"class="org.framework.ibatis.spring.SqlMapClientFactoryBean"><!--Mysql,Sqlserver通用ibatis配置文件-->propertyname="configLocation

C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient main.c -o main.out -I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件) -L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找) -l:链接libmysqlclient.so动态库 -o:生成的可执行文件名 三.完整示例 //

一个小时学会MySQL数据库

随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道. 一.数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入数据的物流仓库. 在商业领域,信息就意味着商机,取得信息的一个非常重要的途径就是对数据进行分析处理,这就催生了各种专业的数据管理软件,数据库就是其中的一种.当然,数据库管理系统也不是一下子就建立起来,它也是经过了不断的丰富和发展,才有了今天的模样. 1.1.发展历史 1.1.1.人工处理阶段 在20