Linux,MySQL 5.x,預設 lower_case_table_names=0。
mysql> USE mytest;
mysql> CREATE TABLE MyTable (id INT, name VARCHAR(10), dt DATE);
mysql> CREATE TABLE mytable (id INT, name VARCHAR(10), dt DATE);
mysql> SHOW TABLES;
+------------------+
| Tables_in_mytest |
+------------------+
| MyTable |
| mytable |
+------------------+
兩個表共存,大小寫敏感。
vi /etc/my.cnf → [mysqld] 下加 lower_case_table_names=1service mysqld restart
mysql> USE mytest;
mysql> SELECT * FROM MyTable; -- 查到 mytable 資料
mysql> SELECT * FROM mytable; -- 查到 mytable 資料
mysql> CREATE TABLE MyTable (id INT); -- ERROR 1050: Table 'mytable' already exists
mysql> CREATE DATABASE MyTest; -- ERROR 1007: Database 'mytest' exists
表名/庫名**統一轉小寫儲存與比較**,大寫變體不可建立、查詢導向同一實體。
-- 停服務前執行
RENAME TABLE `MyTable` TO `mytable`;
RENAME TABLE `MyTest` TO `mytest`;
-- 所有庫表同理
否則改參數重啟後,原大寫表**不可見、不可查、不可刪**,極難處理。
CI)。lower_case_table_names=1 使 MySQL 行為與 SQL Server 一致,減少應用層修改。collation-server=utf8mb4_general_ci(或 latin1_general_ci)進一步對齊字串比較語意。=1 並轉換既有表名最划算。