mysql大小寫敏感配置

2021-08-02 23:39:59 字數 3468 閱讀 3391

mysql大小寫敏感配置相關的兩個引數,lower_case_file_system 和 lower_case_table_names。

檢視當前mysql的大小寫敏感配置

show global variables like '%lower_case%';

+------------------------+-------+

| variable_name | value |

+------------------------+-------+

| lower_case_file_system | on |

| lower_case_table_names | 0 |

+------------------------+-------+

lower_case_file_system

表示當前系統檔案是否大小寫敏感,唯讀引數,無法修改。

on  大小寫不敏感

off 大小寫敏感

lower_case_table_names

表示表名是否大小寫敏感,可以修改。

lower_case_table_names = 0時,mysql會根據表名直接操作,大小寫敏感。

lower_case_table_names = 1時,mysql會先把表名轉為小寫,再執行操作。

設定lower_case_table_names的值

開啟my.cnf檔案,加入以下語句後重啟。

lower_case_table_names = 0 或 lower_case_table_names = 1

建立表 user

create

table

`user` (

`id`

int(11) unsigned not

null auto_increment,

`name`

varchar(20) not

null,

primary

key (`id`)

) engine=innodb default charset=utf8;

1.設定lower_case_table_names = 0

表名與建立時大小寫一致

select count(*) from user;

+----------+

| count(*) |

+----------+

| 0 |

+----------+

表名與建立時大小寫不一致

select

count(*) from

user;

error 1146 (42s02): table 'user.user' doesn't exist

lower_case_table_names=0時,表名大小寫敏感。

2.設定lower_case_table_names = 1

表名與建立時大小寫一致

select count(*) from user;

+----------+

| count(*) |

+----------+

| 0 |

+----------+

表名與建立時大小寫不一致

select count(*) from user;

+----------+

| count(*) |

+----------+

| 0 |

+----------+

lower_case_table_names=1時,表名大小寫不敏感。

3.設定lower_case_table_names=1時,原來在lower_case_table_names=0時建立的表提示不存在的解決方法

在lower_case_table_names=0時使用大小寫混用建立表名,再設定lower_case_table_names=1後,原建立的表使用時會提示不存在。

演示

首先設定lower_case_table_names=0

建立表 user(大小寫混用)

create table `user` (

`id` int(11) unsigned not null auto_increment,

`name` varchar(20) not null,

primary key (`id`)

) engine=innodb default charset=utf8;

show tables;

+----------------+

| tables_in_user |

+----------------+

| user |

+----------------+

再設定lower_case_table_names=1

執行查詢,不管表名是大寫還是小寫,都提示表不存在

select * from

user;

error 1146 (42s02): table 'user.user' doesn't exist

select * from

user;

error 1146 (42s02): table 'user.user' doesn't exist

select * from

user;

error 1146 (42s02): table 'user.user' doesn't exist

因為lower_case_table_names=1時,會先把表名轉為小寫後再操作,而檔案中根本不存在小寫的表名檔案,因此出錯。

解決方法:

如果要將lower_case_table_names從0修改為1時,應先對舊資料表的表名進行處理,把所有資料庫的表名先改為小寫,最後再設定lower_case_table_names為1,否則會出現上述的問題。

總結:

作業系統不同導致大小寫敏感不一致。我們在開發時,應該按大小寫敏感的原則去開發,這樣可以使開發的程式相容不同的作業系統。因此,建議在開發測試環境下把lower_case_table_names的值設為0,便於在開發中就嚴格控制**大小寫敏感,提高**的相容和嚴謹。

mysql 區分大小寫 大小寫敏感 配置

linux下mysql預設區分大小寫 windows下mysql預設不區分大小寫 檢視是否區分大小寫 lower case table names引數詳解 lower case table names 0 其中 0 區分大小寫,1 不區分大小寫 mysql在linux下資料庫名 表名 列名 別名大小...

MySQL大小寫敏感

mysql大小寫敏感的解決方案 注 關於lower case table names引數對錶名稱或資料庫名稱大小寫敏感的控制。unix下預設為0,也就是大小寫敏感的 windows下預設為1,不敏感 macos預設為2,儲存區分大小寫,但是在查詢時會轉換為小寫。對於在大小寫不敏感的系統 window...

去除mysql 大小寫敏感

mysql在linux下資料庫名 表名 列名 別名大小寫規則是這樣的 1 資料庫名與表名是嚴格區分大小寫的 2 表的別名是嚴格區分大小寫的 3 列名與列的別名在所有的情況下均是忽略大小寫的 4 字段內容預設情況下是大小寫不敏感的。mysql中控制資料庫名和表名的大小寫敏感由引數lower case ...