91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中Identifier Case Sensitivity問題的示例分析

發布時間:2021-07-30 10:57:28 來源:億速云 閱讀:120 作者:小新 欄目:MySQL數據庫

這篇文章主要介紹了MySQL中Identifier Case Sensitivity問題的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

In MySQL, databases correspond to directories within the data directory. Each table within a database corresponds to at least one file within the database directory (and possibly more, depending on the storage engine). Triggers also correspond to files. Consequently, the case sensitivity of the underlying operating system plays a part in the case sensitivity of database, table, and trigger names. This means such names are not case-sensitive in Windows, but are case-sensitive in most varieties of Unix. One notable exception is macOS, which is Unix-based but uses a default file system type (HFS+) that is not case-sensitive. However, macOS also supports UFS volumes, which are case-sensitive just as on any Unix. See Section 1.8.1, “MySQL Extensions to Standard SQL”. Thelower_case_table_names system variable also affects how the server handles identifier case sensitivity, as described later in this section.

在 MySQL 中, 數據庫對應于數據目錄中的目錄。數據庫中的每個表對應于數據庫目錄中至少一個文件 (可能更多, 具體取決于存儲引擎)。觸發器也對應于文件。因此, 底層操作系統的區分大小寫在數據庫、表和觸發器名稱的大小寫敏感度方面起著重要作用。這意味著這些名稱在 Windows 中不區分大小寫, 但在大多數類型的 Unix 中都是區分大小寫的。一個顯著的例外是 macOS, 它是基于 Unix 的, 但使用的是不區分大小寫的默認文件系統類型 (HFS+)。但是, macOS 還支持 UFS 卷, 它們與任何 Unix 一樣都是區分大小寫的。參見1.8.1 節, “MySQL Extensions to Standard SQL“。lower_case_table_names 系統變量還影響服務器處理標識符大小寫靈敏度的方式, 如本節后面所述。

 Linux系統:

數據庫名與表名是嚴格區分大小寫的;
表的別名是嚴格區分大小寫的;
列名與列的別名在所有的情況下均是忽略大小寫的;
變量名也是嚴格區分大小寫的;

Windows系統:

都不區分大小寫
Mac OS下(非UFS卷):
都不區分大小寫

注意事項:列名、索引、存儲過程、事件名稱在任何平臺上都不區分大小寫,列別名也不區分大小寫。

Notice:Column, index, stored routine, and event names are not case sensitive on any platform, nor are column aliases.

下面在測試環境為Red Hat Enterprise Linux Server release 5.7, MySQL 5.6.20:

mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| lower_case_table_names | 0   |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> 
mysql> use mydb;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.07 sec)
mysql> create table TEST(id int);
Query OK, 0 rows affected (0.09 sec)
mysql> insert into test values(1);
Query OK, 1 row affected (0.03 sec)
mysql> insert into TEST value(2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+
| id  |
+------+
|  1 |
+------+
1 row in set (0.00 sec)
mysql> select * from TEST;
+------+
| id  |
+------+
|  2 |
+------+
1 row in set (0.00 sec)
mysql>

在配置文件my.cnf中設置lower_case_table_names=1后(1表示不區分大小寫,0表示區分大小寫),重啟MySQL服務后,進行如下測試:

mysql> use mydb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from test;
+------+
| id  |
+------+
|  1 |
+------+
1 row in set (0.00 sec)
mysql> select * from TEST;
+------+
| id  |
+------+
|  1 |
+------+
1 row in set (0.00 sec)
mysql>

MySQL中Identifier Case Sensitivity問題的示例分析

可以看到此時不管是test、TEST抑或Test,都是訪問的test,此時不能訪問”TEST”表了,系統變量lower_case_table_names是只讀變量,也無法在當前會話修改,這種設置下,如果存在相同的表名的話,使用mysqldump備份數據庫時會遇到下面錯誤:

mysqldump: Got error: 1066: Not unique table/alias: ‘test' when using LOCK TABLES

遇到這種情況就比較麻煩了,必須在配置文件my.cnf中設置變量lower_case_table_names=0,重啟MySQL服務,所以提前規劃,使用統一的命名規則就非常重要,可以避免這樣的問題出現。另外系統變量lower_case_table_names有三個值:分別是0、1、2.

1. 設置成0:表名按你寫的SQL大小寫存儲,大寫就大寫小寫就小寫,比較時大小寫敏感。

2. 設置成1:表名轉小寫后存儲到硬盤,比較時大小寫不敏感。 

3. 設置成2:表名按你寫的SQL大小寫存儲,大寫就大寫小寫就小寫,比較時統一轉小寫比較。

MySQL中Identifier Case Sensitivity問題的示例分析
 

 

關于數據庫名大小寫敏感,會遇到下面問題:

1:ERROR 1010 (HY000): Error dropping database (can't rmdir ‘./xxxx', errno: 39)

1:ERROR 1010 (HY000): Error dropping database (can't rmdir './xxxx', errno: 39) 

mysql> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| MyDB        |
| mydb        |
| mysql       |
| performance_schema |
| tmonitor      |
| xiangrun      |
+--------------------+
7 rows in set (0.01 sec)
mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| lower_case_table_names | 1   |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> drop database mydb;
ERROR 1010 (HY000): Error dropping database (can't rmdir './mydb', errno: 39)
mysql>

解決方法:在配置文件my.cnf中設置變量lower_case_table_names=0,重啟MySQL服務,然后就可以drop 掉數據庫了。

2: ERROR 1049 (42000): Unknown database ‘xxx'

mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| lower_case_table_names | 1   |
+------------------------+-------+
1 row in set (0.01 sec)
mysql> 
mysql> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| MyDB        |
| mysql       |
| performance_schema |
| tmonitor      |
| xiangrun      |
+--------------------+
6 rows in set (0.01 sec)
mysql> use MyDB;
ERROR 1049 (42000): Unknown database 'mydb'
mysql>

感謝你能夠認真閱讀完這篇文章,希望小編分享的“MySQL中Identifier Case Sensitivity問題的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四会市| 河曲县| 桐城市| 抚州市| 镇宁| 宽甸| 隆化县| 合肥市| 永丰县| 镇沅| 哈尔滨市| 黎平县| 唐海县| 二手房| 大洼县| 波密县| 玉树县| 徐闻县| 新巴尔虎右旗| 巫山县| 长海县| 宁陵县| 蓬安县| 志丹县| 宝应县| 若尔盖县| 彭阳县| 正定县| 社旗县| 东阿县| 谢通门县| 赤城县| 辽源市| 勃利县| 广安市| 积石山| 鄯善县| 永泰县| 辽源市| 浠水县| 铜山县|