摘要: 用过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 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
分享到:
相关推荐
然而,在8.0版本中,MySQL对此进行了重大改动:该参数现在只能在服务器初始化时进行配置,并且默认值在不同的操作系统上有区别——Windows下默认为1(大小写不敏感),而在Linux下则保持不变,仍为0(大小写敏感)。...
本文将深入探讨SQL Server与MySQL这两种主流数据库管理系统中关于大小写敏感性的设置。 #### SQL Server 大小写敏感性设置 SQL Server默认情况下对标识符(例如表名、列名等)是不区分大小写的。然而,在某些场景...
然而,在Windows系统中,文件系统通常是大小写不敏感的,MySQL在这种情况下也不会区分数据库和表名的大小写。但是,值得注意的是,Mac OS X虽然基于Unix,但其默认的HFS+文件系统并不区分大小写,尽管内部Unix层可能...
本节将详细介绍在Linux环境下安装MySQL数据库的方法,主要包括下载安装资源库、安装MySQL服务、设置表名大小写不敏感、修改默认密码以及创建远程管理用户等内容。 ##### 2.1 下载并安装资源库 根据目标系统的版本...
而当`lower_case_table_names`设置为1时,系统会将所有数据库名和表名转换为小写,然后进行大小写不敏感的比较。默认情况下,Windows系统中此参数为1,而Unix/Linux系统中为0。 在Windows环境中,如果你希望使MySQL...
在Linux系统中,MySQL数据库的大小写处理是一个常见的问题,因为不同的操作系统对于大小写的处理方式有所差异。在Windows系统中,MySQL通常不区分数据库名、表名和列名的大小写,但在Linux环境下,情况则有所不同。 ...
在数据库管理中,可以改变数据库的字符集和校对规则,例如将数据库字符集更改为gb2312,使其支持简体中文且不区分大小写。此外,还可以通过相关SQL语句查询数据库的结构信息,了解其内部构成。 接下来是【表及数据...
在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询条件中使用了不同的大小写字母,比如"aaa"和"Aaa",它们会被视为相同,从而可能导致你期望的精确匹配失败。这对于一些特定场景,比如...
这行配置告诉MySQL服务器,无论在创建数据库或表时使用什么大小写,都将所有表名转换为小写进行存储和比较,从而在查询操作中实现了大小写不敏感。 ### 重启MySQL服务 修改完配置文件后,需要重启MySQL服务以使...
例如,MySQL在Unix系统上默认是大小写敏感的,但在Windows上则是大小写不敏感的。这可以通过更改数据库的collation(排序规则)来调整。 5. **编码与字符集**:选择正确的字符集也很关键,因为不同的字符集对大小写...
同时,MySQL的数据库和表在操作系统下对应为目录和文件,所以它们的大小写敏感性取决于操作系统的规则。 索引是提升数据库查询性能的关键,MySQL支持多种类型的索引,如B-tree、Hash和Full-text索引。用户变量用@...
MySQL数据库在处理表名、数据库名以及列名时的大小写规则可能会因操作系统的差异而有所不同。在Linux系统中,默认情况下MySQL是区分大小写的,而在Windows系统中则通常是不区分大小写的。对于开发者来说,保持一致性...
- KingbaseES默认使用大小写敏感模式,因此所有列名都应转换为大写或小写,避免大小写混用导致识别问题。 **2. `NLSSORT` 函数** - KingbaseES不支持 `NLSSORT` 函数。 **3. `GROUP BY` 语句** - KingbaseES对 `...
根据提供的文档信息,本文将对MySQL数据库的关键特性及其在Jsp/Servlet网上拍卖系统中的应用进行深入探讨。MySQL作为一款广泛使用的开源关系型数据库管理系统,因其高性能、稳定性以及丰富的功能特性而受到众多...
此外,如果你的数据库是在区分大小写敏感的模式下创建的,然后改为不区分大小写,可能会导致数据丢失或混乱,因此建议始终谨慎操作。 总之,调整`lower_case_table_names`参数是MySQL管理员在特定场景下需要考虑的...
设置`lower_case_table_names = 1`使得数据库不区分大小写,`sql_mode`定义严格模式,以及其他相关参数。 6. **初始化数据库**: 在安装libaio库之后,使用`/usr/local/mysql/bin/mysqld --initialize --user=...
MySQL 数据库同步复制是一种强大的技术,它允许两个或多个数据库实例之间保持数据一致性。这种功能在高可用性、灾难恢复和负载均衡场景中至关重要。在MySQL中,同步复制主要通过主从模式和双机互备模式来实现。 1. ...