zoukankan      html  css  js  c++  java
  • 将现有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变成小写的,然后到新数据库中去执行,重新创建即可。

  • 相关阅读:
    WPF之感触
    C# WinForm 给DataTable中指定位置添加列
    MyEclipse 8.6 download 官方下载地址
    将博客搬至CSDN
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
  • 原文地址:https://www.cnblogs.com/studyzy/p/6122739.html
Copyright © 2011-2022 走看看