萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL對大小寫敏感一些總結

MySQL對大小寫敏感一些總結

MySQL的大小寫敏感其實是根據用戶的操作系統來的, 可以強制以 -O lower_case_table_names=1 參數啟動 mysqld(如果使用 --defaults-file=...\\my.cnf 參數來讀取指定的配置文件啟動 mysqld 的話,你需要在配置文件的 [mysqld] 區段下增加一行 lower_case_table_names=1)。

這樣MySQL 將在創建與查找時將所有的表名自動轉換為小寫字符(這個選項缺省地在 Windows 中為 1 ,在 Unix 中為 0。從 MySQL 4.0.2 開始,這個選項同樣適用於數據庫名)。

當你更改這個選項時,你必須在啟動 mysqld 前首先將老的表名轉換為小寫字母。

換句話說,如果你希望在數據庫裡面創建表的時候保留大小寫字符狀態,則應該把這個參數置0: lower_case_table_names=1 。

否則的話你會發現同樣的sqldump腳本在不同的操作系統下最終導入的結果不一樣(在Windows下所有的大寫字符都變成小寫了)。

注意:

在Win32上,盡管數據庫和表名是忽略Mysql大小寫的,你不應該在同一個查詢中使用不同的大小寫來引用一個給定的數據庫和表。下列查詢將不工作,因為它作為my_table和作為MY_TABLE引用一個表:

 代碼如下 復制代碼

  1.Mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

2、列名

  列名在所有情況下都是忽略大小寫的。

3、表的別名

  表的別名是區分大小寫的。下列查詢將不工作,: 因為它用a和A引用別名:

 代碼如下 復制代碼

  1.Mysql> SELECT col_name FROM tbl_name AS a

  2.WHERE a.col_name = 1 OR A.col_name = 2;

4、列的別名

  列的別名是忽略大小寫的。

5、字符串比較和模式匹配

  缺省地,Mysql搜索是大小寫不敏感的(盡管有一些字符集從來不是忽略Mysql大小寫的,例如捷克語)。這意味著,如果你用col_name LIKE 'a%'搜尋,你將得到所有以A或a開始的列值。如果你想要使這個搜索大小寫敏感,使用象INDEX(col_name, "A")=0檢查一個前綴。或如果列值必須確切是"A",使用STRCMP(col_name, "A") = 0。

  簡單的比較操作(>=、>、= 、< 、<=、排序和聚合)是基於每個字符的“排序值”。有同樣排序值的字符(象E,e)被視為相同的字符!

  LIKE比較在每個字符的大寫值上進行(“E”=”e”)。

  如果你想要一個列總是被當作Mysql大小寫敏感的方式,聲明它為BINARY。

例如:

 代碼如下 復制代碼


  1.Mysql> SELECT "E"="e","E"=BINARY "e";
  2.+---------+----------------+| "E"="e" | "E"=BINARY "e"
  |+---------+----------------+| 1 | 0 |+---------+----------------+

copyright © 萬盛學電腦網 all rights reserved