簡體   English   中英

PHP Mysql不區分大小寫表選擇

[英]PHP Mysql Case insensitive table select

我正在嘗試檢測數據庫中的表是否已經存在。 但是,我編寫的以下代碼似乎區分大小寫。 如果表名是Test並且$ name = TEST。 下面的代碼將不正確。 有什么辦法可以使這種情況變得不敏感? 還是有更有效的方法?

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '$name'")) == 1) {
    ....
}

抱歉,無法使用該語法完成。 您必須執行以下操作:

SELECT `TABLE_NAME`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `TABLE_CATALOG` IS NULL
AND `TABLE_SCHEMA` = 'yourdatabasename'
AND `TABLE_NAME` LIKE 'yourtablename'
$name = "table_name";
$result = mysql_list_tables("mydb");
$num_rows = mysql_num_rows($result);
for ($i = 0; $i < $num_rows; $i++) {
    if (strtolower(mysql_tablename($result, $i)) == strtolower($name)) {
        echo "Table detected";

    }
}

確保您檢查了lower_case_table_names系統變量的值。 默認值是根據您的操作系統分配的:

  • 0-UNIX / Linux

  • 1-Windows

  • 2-Mac

根據MySQL文檔

  • 0-表名和數據庫名使用CREATE TABLE或CREATE DATABASE語句中指定的字母大小寫存儲在磁盤上。 名稱比較區分大小寫。 如果您在文件名不區分大小寫的系統(例如Windows或Mac OS X)上運行MySQL,則不應將此變量設置為0。 如果在不區分大小寫的文件系統上使用--lower-case-table-names = 0將該變量強制為0,並使用不同的字母大寫字母訪問MyISAM表名,則可能導致索引損壞。

  • 1-表名稱以小寫形式存儲在磁盤上,名稱比較不區分大小寫。 MySQL在存儲和查找時將所有表名轉換為小寫。 此行為也適用於數據庫名稱和表別名。

  • 2-表名和數據庫名使用CREATE TABLE或CREATE DATABASE語句中指定的字母大小寫存儲在磁盤上,但是MySQL在查找時將它們轉換為小寫。 名稱比較不區分大小寫。 這僅適用於不區分大小寫的文件系統! InnoDB表名以小寫形式存儲,與lower_case_table_names = 1相同。

當然,您可以更改lower_case_table_names的值,但是您需要導出/導入數據以使其影響當前的數據庫表。

感謝您的回答,但看來我已經回答了自己的問題。 我將使用strtolower()將所有表存儲為小寫

接着:

$LowerName = strtolower($name);
if( mysql_num_rows( mysql_query("SHOW TABLES LIKE '$LowerName'")) == 1)
{
   ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM