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

摘要: 用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在。而Windows下的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变成小写的,然后到新数据库中去执行,重新创建即可。

本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/p/6122739.html,如需转载请自行联系原作者


版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 中,如果需要将现有数据库大小写敏感规则修改为敏感,可以通过以下步骤实现: 1. 备份数据库,以防止意外操作导致数据丢失。 2. 登录 MySQL 数据库: ``` mysql -u username -p ``` 其中,username 是你的用户名,执行以上命令后会提示你输入密码。 3. 运行以下命令,设置 MySQL 全局变量 lower_case_table_names 的值为 1: ``` set global lower_case_table_names=1; ``` 该命令将全局变量 lower_case_table_names 设置为 1,表示大小写敏感。 4. 修改 MySQL 的配置文件,使该设置永久生效。可以运行以下命令,查看 MySQL 配置文件的路径: ``` show variables like '%config%'; ``` 在结果中,找到配置文件路径(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf),用文本编辑器打开该文件,添加以下内容: ``` [mysqld] lower_case_table_names=1 ``` 5. 重启 MySQL 服务,使设置生效: ``` systemctl restart mysql ``` 6. 重新登录 MySQL 数据库。 7. 使用以下命令,将现有数据库的字符集和排序规则修改为敏感的字符集 utf8mb4_general_ci: ``` alter database database_name character set utf8mb4 collate utf8mb4_general_ci; ``` 其中,database_name 是要修改的数据库名称。 8. 修改现有表的表名和列名,将它们都修改为小写,以保证大小写敏感。 这样,就可以在不重建数据库的情况下,将现有MySQL 数据库大小写敏感规则修改为敏感了。需要注意的是,修改表名和列名可能会影响到应用程序的运行,应该谨慎操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值