MySQL 在 Linux 上預設區分資料庫名與表名大小寫(受檔案系統影響),而在 Windows 上則不區分。透過 lower_case_table_names 參數可統一行為。
| 識別符類型 | Linux | Windows |
|---|---|---|
| 資料庫名 / 表名 | 嚴格區分 | 不區分 |
| 表別名 | 嚴格區分 | 不區分 |
| 欄位名 / 欄位別名 | 不區分 | 不區分 |
| 變數名 | 嚴格區分 | 不區分 |
vi /etc/my.cnf(或 /etc/mysql/my.cnf)[mysqld] 區段新增:lower_case_table_names=1service mysqld restart0(預設):區分大小寫,資料庫/表名按指定大小寫儲存。1:不區分大小寫,所有名稱轉為小寫儲存與比較。2:儲存時保留大小寫,但比較時轉為小寫(僅限不區分大小寫的檔案系統)。[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
# 新增此行
lower_case_table_names=1
SHOW VARIABLES LIKE 'lower_case_table_names';
-- 結果應為 1
CREATE TABLE TestTable (id INT);
SELECT * FROM testtable; -- 應可正常查詢
Windows 下即使設定 lower_case_table_names=0,查詢時仍不區分大小寫;僅影響匯入匯出時的檔案名稱大小寫保留。
若需讓欄位值比較區分大小寫,需在欄位定義加 BINARY 屬性或查詢時用 BINARY 關鍵字:
-- 建表時指定
CREATE TABLE t (col VARCHAR(10) BINARY);
-- 修改既有欄位
ALTER TABLE t MODIFY col VARCHAR(10) BINARY;
-- 查詢時指定
SELECT * FROM t WHERE BINARY col = 'AbC';