阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

194次阅读
没有评论

共计 1465 个字符,预计需要花费 4 分钟才能阅读完成。

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138566.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1465字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中