首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL lower_case_table_names=1 實測:跨平台兼容與 SQL Server 遷移最佳實踐

     編輯:MySQL 資料庫相關知識

實驗環境

Linux,MySQL 5.x,預設 lower_case_table_names=0。

階段 1:預設行為(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          |
+------------------+

兩個表共存,大小寫敏感。

階段 2:修改為 1 並重啟

  1. vi /etc/my.cnf → [mysqld] 下加 lower_case_table_names=1
  2. service mysqld restart

階段 3:驗證不敏感行為


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`;
-- 所有庫表同理

否則改參數重啟後,原大寫表**不可見、不可查、不可刪**,極難處理。

SQL Server 遷移兼容性說明

  • SQL Server 預設**不區分大小寫**(Collation CI)。
  • 設 lower_case_table_names=1 使 MySQL 行為與 SQL Server 一致,減少應用層修改。
  • 配合 collation-server=utf8mb4_general_ci(或 latin1_general_ci)進一步對齊字串比較語意。

生產環境建議

  1. 新專案**一律小寫命名**,從源頭消除問題。
  2. 遷移專案:評估改動成本,若應用層大量硬編碼大寫表名,設 =1 並轉換既有表名最划算。
  3. 跨平台部署(開發 Win / 生產 Linux)**統一參數**,避免「開發通、生產掛」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved