1.在MySQL中,可以通过lower_case_table_names=0/1来设置是否区分大小写,0代表区分大小写,1代表不分区大小写。
2.在MySQL5.7及之前的版本中,你可以在配置文件里随意修改这个参数的值。但是在MySQL8.0版本中,这个值只能在数据库初始化时指定一次,后续无法通过修改配置文件来变更这个值,比如在8.0的数据库中,初始化时指定了lower_case_table_names=0,数据库安装好后又通过配置文件指定了lower_case_table_names=1,这时数据库是起不来的。
3.当lower_case_table_names=0时,创建的数据库、表会按照创建时的大小写规则保存对应的数据文件到磁盘上,可以在MySQL的Data目录看到
严格按照SQL中指定的库表查询,如 select * from TestDB.TestTable; 如果数据库和表名是testdb.testtable,这时这个sql是查不到的。

4.当lower_case_table_names=1时,不管创建数据库、表的语句中是大写还是小写字母,会统一转化为小写字母存储数据到磁盘上
当程序发送过来的SQL中即包含大写字母,又包含小写字母,数据库会统一将它转化为小写,并去读取对应的库表。
4.1 当前的配置为不分区大小写
show variables like '%lower%';

4.2 TestDb与testdb两个库中均包含student表,TestDb中的为Student,testdb中的为student。两个表里的数据是一致的

4.3 在不区分大小写的情况下执行update TestDb.Student set age=38 where id='1';
查看原数据:select * from TestDb.Student;

执行update后,再查看数据。可以看到数据已经被修改了。但是此时到底修改的是TestDb.Student表里的数据还是testdb.student表里的数据呢?按照上述逻辑,在不区分大小写的情况下,mysql会将sql中的大写字母都转化为小写字母,那也就是说是修改的testdb.student表里的数据,TestDb.Student表里的数据是没有备修改的。验证这个观点的话,还需要把大小写敏感设置为0,也就是区分大小写才能验证出来。

4.4 修改大小写敏感参数为0,重启mysql
4.5 验证上述观点,根据结果可以得出结论,上述观点是没问题的

4.A库区分大小写→B库不分区大小写,在导出A的库数据导入B库时,B库中的所有库表都会转为小写,因为sql中的大写会统一转为小写。