當(dāng)前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

MySql大小敏感設(shè)置和修改
2021-09-24 14:52:51

一、mysql配置文件控制

mysql是通過lower_case_table_names參數(shù)來控制大小寫敏感的,該參數(shù)在[mysqld]結(jié)點(diǎn)下。

https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

表和數(shù)據(jù)庫名稱在磁盤上的存儲方式以及在 MySQL 中的使用方式受lower_case_table_names系統(tǒng)變量的影響 。 lower_case_table_names可以取下表所示的值。這個變量不 影響觸發(fā)標(biāo)識符的情況下的靈敏度。在 Unix 上,默認(rèn)值為 lower_case_table_names0。在 Windows 上,默認(rèn)值為 1。在 macOS 上,默認(rèn)值為 2。

lower_case_table_names只能在初始化服務(wù)器時配置。lower_case_table_names禁止在服務(wù)器初始化后更改 設(shè)置。

價值 意義
0 表和數(shù)據(jù)庫名稱使用CREATE TABLEorCREATE DATABASE語句中指定的字母大小寫存儲在磁盤上。名稱比較區(qū)分大小寫。你應(yīng)該不會,如果你有不區(qū)分大小寫的文件名(如Windows或Mac系統(tǒng))的系統(tǒng)上運(yùn)行MySQL這個變量設(shè)置為0。如果--lower-case-table-names=0 在不區(qū)分大小寫的文件系統(tǒng)上將此變量強(qiáng)制為 0 并MyISAM使用不同的字母訪問 表名,則可能會導(dǎo)致索引損壞。
1 表名以小寫形式存儲在磁盤上,名稱比較不區(qū)分大小寫。MySQL 在存儲和查找時將所有表名轉(zhuǎn)換為小寫。此行為也適用于數(shù)據(jù)庫名稱和表別名。
2 表和數(shù)據(jù)庫名稱使用CREATE TABLEorCREATE DATABASE語句中指定的字母存儲在磁盤上,但 MySQL 在查找時將它們轉(zhuǎn)換為小寫。名稱比較不區(qū)分大小寫。這僅適用于不區(qū)分大小寫的文件系統(tǒng)! InnoDB表名和視圖名以小寫形式存儲,如 lower_case_table_names=1.

如果您僅在一個平臺上使用 MySQL,則通常不必使用 lower_case_table_names默認(rèn)設(shè)置以外的設(shè)置。但是,如果要在文件系統(tǒng)區(qū)分大小寫不同的平臺之間傳輸表,可能會遇到困難。例如,在 Unix 上,您可以有兩個名為my_tableand 的 不同表MY_TABLE,但在 Windows 上,這兩個名稱被認(rèn)為是相同的。為避免因數(shù)據(jù)庫或表名的字母大小寫引起的數(shù)據(jù)傳輸問題,您有兩種選擇:

  • lower_case_table_names=1在所有系統(tǒng)上 使用。這樣做的主要缺點(diǎn)是當(dāng)您使用SHOW TABLES或 時 SHOW DATABASES,您看不到原始字母中的名稱。

  • 使用lower_case_table_names=0在Unix和 lower_case_table_names=2Windows上。這保留了數(shù)據(jù)庫和表名的字母大小寫。這樣做的缺點(diǎn)是您必須確保您的語句在 Windows 上始終使用正確的字母來引用您的數(shù)據(jù)庫和表名稱。如果你把你的語句轉(zhuǎn)移到 Unix 上,在這種情況下,字母是重要的,如果字母不正確,它們將不起作用。

    例外:如果您正在使用 InnoDB表并試圖避免這些數(shù)據(jù)傳輸問題,您應(yīng)該 lower_case_table_names=1在所有平臺上使用強(qiáng)制將名稱轉(zhuǎn)換為小寫。

二、建表或者字段解決方法

1.創(chuàng)建表時,將字段標(biāo)記為binary,二進(jìn)制大小寫是敏感的

2.在查詢條件的字段前加binary,但是不建議這么做,因為會使字段索引失效

3.建表時設(shè)置校對規(guī)則(collate)

_bin: 表示的是binary case sensitive collation,也就是說是區(qū)分大小寫。
_ci: case insensitive collation,不區(qū)分大小寫 。

CREATE TABLE `atest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 collate uft8_bin;

4.如果建表時校對規(guī)則未用_bin,則可直接修改字段的屬性

alter table test3 modify name varchar(20) collate utf8_bin;

https://www.cnblogs.com/developer_chan/p/9247674.html

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >