WB : Synchronize Model issue

之前當進行 Databses/Synchronize Model 的時候老是發生明明 EER, live DB 兩邊一樣的 schema 卻產生需要異動的 script,今天,終於發現問題所在了!ヽ(`△´)/

MySQL Workbench 在進行兩邊比對的時候是採取 case sensitive
模式,在 live DB 是 unix like OS 的情形下這應該是不會出問題的,但是!當 live DB 是 Windows 的時候就慘了,例如:Diagram 有一個 view 叫做 vw_ProductListWithThumbnail,Forward Engineer 到了 live DB on Windows 之後就會變成 vw_productlistwiththumbnail,這樣一比對之後結果當然不一樣了... =_=

Reference:
http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html

針對這個問題 Google 一下相關的文章發現以下文章提到許多 MySQL 運作在 Windows 平台上的問題:
Does MySQL care about Windows users?

所以,就算在 my.ini 裡設定 lower_case_table_names = 2,當使用者 CREATE 的是 view 的時候,CREATE 'ViEw' 結果還是會變成 'view';當使用 mysqldump 作 backup 的時候更慘,所有 table name, view name 一樣全部變成小寫,而且這個問題在 bugs 裡放了三年有了! (ノ ゜Д゜)ノ == ┻━┻

若是在 Windows 平台上強制將 lower_case_table_names = 0,可能會收到以下警告:

[Warning] You have forced lower_case_table_names to 0 through a command-line option, even though your file system '/mysql/data/' is case insensitive. This means that you can corrupt a MyISAM table by accessing it with different cases. You should consider changing lower_case_table_names to 1 or 2

所以當開發者會在不同平台上使用 MySQL 的狀況下,這會是個很嚴重的問題,不得不注意。

補記:
[2010/11/14]
以 Server version: 5.1.47-community MySQL Community Server (GPL) on Windows XP 的環境下測試 lower_case_table_names = 2 的影響,測試結果為:

  • 建立的 DATABASE、TABLE 的確保留了原始的大小寫,在檔案系統中也是
  • 建立的 VIEW 全部變成小寫,在檔案系統中也是
  • mysqldump 的結果,CREATE DATABASE 裡的名稱變成全部小寫,但是 USE 跟 CREATE TABLE 是正確的,CREATE VIEW 裡的名稱全部變成小寫。

結論:

  • 資料庫的名稱以全小寫建立即可
  • VIEW 就很辛苦了,不能用個 vw_GetDataFromT1andT2 之類的,得用 vw_Get_Data_From_T1_and_T2
分類: 射茶包,標籤: 。這篇內容的永久連結