用过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 '' 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变成小写的,然后到新数据库中去执行,重新创建即可。

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

  1. Linux环境下修改MySQL数据库对表名大小写不敏感

    Linux系统中MySQL对数据库名称和表名是大小写敏感的,这就导致了一些麻烦,虽然已经建立了表和数据,但因为大小写导致无法找到表. MySQL数据库对表名大小写不敏感的设置方法如下: 1.查看MyS ...

  2. windows下mysql数据库表名大小写不敏感

    最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题 ...

  3. MySQL数据库改名字

    在这里首先感谢那个网上已经给出了解决办法的同志 有很多MySQL数据库的初学者可能都会遇到一个关于改名字的问题,可能大家第一时间就会想到去网上搜搜,其实我跟大家的心理是一样的(呵呵). 据我所知,My ...

  4. Django web框架-----Django连接本地现有mysql数据库

    第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...

  5. mysql 数据库表名大小写问题

    lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...

  6. 【备份】使用mysqldump 实现rename database name(mysql数据库改名称)

    需求:将jxl_credit改名为jxl_test;输入:jxl_credit输出: jxl_test; 实现方式:1).新建jxl_test,2).备份jxl_credit到本地,3).然后将备份数 ...

  7. 关于Mysql数据库查询数据大小写的问题汇总

    前天在问答区看到一个童鞋对于mysql中大小写问题不熟悉,在回复他后再次汇总梳理如下: mysql中大小写问题主要有以下两种: A.表名区分大小写 ower_case_table_names 是表名区 ...

  8. Mysql更改表名大小写不敏感

    编辑配置文件 vi /etc/my.cnf 在[mysqld]后添加添加 lower_case_table_names=1 重启服务 service mysqld stop service mysql ...

  9. mysql数据库权限及编码

    CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 在tigase中,发送消息 ...

随机推荐

  1. C# 开发windows服务的一些心得

    最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...

  2. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  3. 读书笔记--SQL必知必会17--创建和操纵表

    17.1 创建表 使用CREATE TABLE语句创建表. 不同的DBMS中CREATE TABLE语句的语法可能不同. 17.1.1 表创建基础 利用CREATE TABLE创建表,必须具备如下信息 ...

  4. 以实际的WebGIS例子探讨Nginx的简单配置

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...

  5. GitHub更新自己Fork的项目

    转自:http://www.tuicool.com/articles/MzMJre github上有个功能叫fork,可以将别人的工程复制到自己账号下.这个功能很方便,但其有一个缺点是:当源项目更新后 ...

  6. MapReduce和Spark写入Hbase多表总结

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 大家都知道用mapreduce或者spark写入已知的hbase中的表时,直接在mapreduc ...

  7. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  8. javascript编程杂记

    1.数组深复制 var obj =[1,2,4]: var obj2 = obj.slice(0);

  9. Autofac 组件、服务、自动装配 《第二篇》

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  10. WPF 自定义ContextMenu且为左键点击显示

    <Button Click="Button_Click_3" Style="{StaticResource NormalButtonStyle}"> ...