1、MySQL庫名、表名大小寫驗證規則設置
1.1 MySQL使用lower_case_table_names 該參數設置庫名、表名大小寫驗證規則。lower_case_table_names 取值結果:1/0,配置文件中如果定義該參數值是1,則該參數值=1;如果定義該參數是除1以外的整數,則該參數值=0(非1即0) 現有1+N、生產環境的字符集是uft8,lower_case_table_names=1,不允許修改。若需要修改,必須得在新部署環境時單獨修改。 (mysql5.7.27和mysql8.0.15 測試均符合上述內容) 舉例說明: ① lower_case_table_names = 0 庫名、表名存儲為給定的大小寫,比較也是區分大小寫的 ###'數據庫名、表名存儲的時候是區分大小寫的' mysql> create database Test2; Query OK, 1 row affected (0.00 sec) mysql> use Test2; Database changed mysql> create table Test(Id int(10) primary key,Name varchar(20)); Query OK, 0 rows affected (0.06 sec) mysql> show create table Test\G *************************** 1. row *************************** Table: Test Create Table: CREATE TABLE `Test` ( `Id` int(10) NOT NULL, `Name` varchar(20) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.01 sec) mysql> show tables; +
2、MySQL數據大小驗證規則修改方法
現有1+N、生產環境的庫名、表名、字段名、數據使用時默認不區分大小寫。若要區分大小寫,需要自定義校驗規則,可參考下面的方法修改校驗規則 2.1 數據庫級別的區分大小寫的規則創建與修改 ① 創建 創建數據庫時指定區分大小寫的規則,然后新創建的表默認都是區分大小寫的,但是歷史表還是不區分大小寫 create database test5 character set utf8 collate=utf8_bin; mysql> create database test5 character set utf8 collate=utf8_bin; Query OK, 1 row affected (0.02 sec) mysql> use test5; Database changed mysql> create table test2(name varchar(20)); Query OK, 0 rows affected (0.06 sec) mysql> show create table test2\G *************************** 1. row *************************** Table: test2 Create Table: CREATE TABLE `test2` ( `name` varchar(20) COLLATE utf8_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 1 row in set (0.00 sec) ② 修改 修改數據庫區分大小寫規則:該庫中歷史表的校驗規則不變,后續新建的表校驗規則是 utf8_bin alter database test character set utf8 collate utf8_bin; 修改數據庫的校驗規則 mysql> alter database test character set utf8 collate utf8_bin; Query OK, 1 row affected (0.89 sec) 歷史表的校驗規則:不區分大小寫 mysql> show create table test\G *************************** 1. row *************************** Table: test Create Table: CREATE TABLE `test` ( `id` int(10) NOT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) 新建表,然后查看新表的校驗規則:創建時未指定。但結果是區分大小寫的 mysql> create table test2(name varchar(20)); Query OK, 0 rows affected (0.32 sec) mysql> show create table test2\G *************************** 1. row *************************** Table: test2 Create Table: CREATE TABLE `test2` ( `name` varchar(20) COLLATE utf8_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 2.2 表級別的區分大小寫的規則創建與修改 ① 創建 mysql> create table test1(id int(10) primary key,name varchar(20)) character set utf8 collate utf8_bin; Query OK, 0 rows affected (0.08 sec) mysql> show create table test1\G *************************** 1. row *************************** Table: test1 Create Table: CREATE TABLE `test1` ( `id` int(10) NOT NULL, `name` varchar(20) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 1 row in set (0.00 sec) ② 修改 mysql> show create table test2\G *************************** 1. row *************************** Table: test2 Create Table: CREATE TABLE `test2` ( `id` int(10) NOT NULL, `name` varchar(20) COLLATE utf8_bin DEFAULT NULL, `gender` varchar(20) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 1 row in set (0.00 sec) mysql> alter table test2 convert to character set utf8 collate utf8_general_ci; Query OK, 0 rows affected (0.12 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table test2\G *************************** 1. row *************************** Table: test2 Create Table: CREATE TABLE `test2` ( `id` int(10) NOT NULL, `name` varchar(20) DEFAULT NULL, `gender` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (