2009-08-11 26 views
2

我有一個PHP代碼庫,用於解決混合大小寫的MySQL表格。例如,xar_intakeformgenerator_ChangeLog。我們的代碼也在windows上運行,在我們知道任何更好的之前,我們將多個數據庫導入Windows服務器。這導致Windows MySQL將所有表名稱更改爲小寫。 (xar_intakeformgenerator_changelog)。我們現在知道如何防止發生新的數據庫。 (Set lower_case_table_names)而且,這些代碼在Windows服務器上運行良好,因爲MySQL只是不關心Windows上表的情況。MySQL區分大小寫的表格轉換

這是問題所在。 Windows服務器給我們帶來了麻煩,我們需要將所有數據庫關閉到Linux服務器。由於所有表名都已轉換爲小寫字母,因此該代碼不適用於Linux。幸運的是,Xaraya創建了表映射。因此,理論上,我可以爲這些數據庫建立一個新的代碼庫,並更改每個模塊的映射以使用小寫表。或者,我們可以在我們將它們導入到Linux機器上以手動更改表名,以使表格案例正確。

更改lower_case_table_names不能更正設置標誌之前被破壞的數據庫。這些全都使用小寫表名。

我對任何一種選擇都不太狂熱。有沒有人知道一個巧妙的方式來處理這個問題?

回答

8

好的。我找到了我的答案。

在Linux服務器上,我需要運行更改我的Linux產生的數據庫,以降低情況下,所有的表名如下:

  1. 如何產生重命名模式中的所有表的SQL腳本其較低的情況下形式:

    select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') 
    from information_schema.tables where table_schema = 'your_schema_name'; 
    
  2. 改名爲數據庫中phpmyadmin爲小寫的名字。

  3. 修改了my.cnf在Linux服務器上使用lower_case_table_names=1

  4. 而重新啓動mysql的。

在此之後,我的代碼將與小寫表名稱一起使用。所以,我能夠導入Windows並在兩者上都有相同的代碼基礎。

+0

oops。我跳過了第1步並完成了其餘的步驟。現在,我在phpmyadmin中看不到我的大寫表。現在當我執行第1步時,我無法重命名錶。可以手動將文件重命名爲小寫嗎? – emaillenin 2013-05-12 13:45:02

+0

'your_schema_name'是指您的數據庫名稱,您可以在'information_schema.TABLES'中進行檢查 – Anil 2014-02-19 12:18:28

1

如果我沒有記錯的話(後來有同樣的問題 - 但在我們決定採用哪種解決方案之前,我停止了該項目的工作......),有一個配置選項,它說明如何使用表名應該使用(區分大小寫或不區分大小寫)。

這裏是我的發現:Identifier Case Sensitivity

引用該頁面:

如果你只在一個 平臺使用MySQL,你通常沒有到 改變其默認lower_case_table_names 變量值。 但是,如果您想在文件系統區分大小寫區分爲 的平臺之間傳輸 表,則可能遇到 困難。對於 示例,在Unix上,可以有兩個名爲my_tableMY_TABLE的不同表,但在Windows上,這兩個 名稱被認爲是相同的。若要從數據庫或表 名稱的大小寫產生 避免數據傳輸的問題,你有兩個選擇:

  • 在所有系統上使用lower_case_table_names=1。 的主要缺點是,當您使用SHOW TABLESSHOW DATABASES時,您看不到原始lettercase中的 名稱。

    • 使用lower_case_table_names=0在Unix和lower_case_table_names=2上 的Windows。這保留了數據庫和表名稱的文件夾 。

(還有更多我沒有複製粘貼,所以要讀該頁面可能是一個不錯的主意;-))

希望這將有助於.. 。

+0

是的,這是防止它改變情況的設置。但是,它已經改變了這組數據庫的情況。 不幸的是,設置此標誌不會在窗口已經損壞之後改變返回的情況。 – 2009-08-11 21:21:18

+0

噢:-(感謝您爲我們提供了您找到的解決方案! – 2009-08-12 04:22:07

+0

@PascalMARTIN您可以引導我從哪裏使用win7和xampp更改'lower_case_table_names' im的值 – 2011-12-17 19:43:35

0

的lower_case_table_names

對於Windows,它默認爲 「讓一切小寫」(1)。將其設置爲2:「不區分大小寫,但保持原樣」。

這些更改進入您的my.cnf

+0

如上所述,我們對此設置進行了更改。但是,我們的數據庫已經被損壞了。 – 2009-08-11 21:22:05