2013年7月30日 星期二

MySQL 查詢轉小寫設定

在之之前學習 Drupal 作為網站開發架構的時候,已經習慣了它使用底線(_)來分隔資料表名字的各個單字,一直以來對於全小寫的資料表命名法已經習以為常,只覺得不過是一種風格,並不會認為有什麼特別的原因。 直到最近將外包的網站案子放到 Linux 環境下,被整過之後的才明白,相信未來還是可能遇到這個問題,作個筆記備查。

問題在於 mysql 不分大小寫的特性,還沒來得及深入研究是不是和資料庫的校對設定有關,至少平常常用的「utf8_general_ci」,本身就是表示的不分大小寫(ci)。所以既使在取資料表名字的時候混用大小寫,使用 mysqldump 匯出的時候,仍然會通通被轉換成小寫。

而資料表中的欄位,根據自己觀察,在匯出的時候大小寫是被保留下來的,所以問題主要不會發生在這裡,而是在會被改成全小寫的資料表名稱。因為 MySQL 要依靠程式傳給它的名稱去找到對應的檔案,讀取資料。在 SQL 語法被寫在程式碼中,如果是以原始的資料表名稱(分大小寫)的方式撰寫,而 MySQL 卻已經將之轉換為全小寫,就會有所差異。

如果是在 Windows 這種不分大小寫的作業系統,不會出現什麼問題,因為任何大小寫的方式,通通代表同樣的檔案。但是對於 UNIX Like 的系統,則會產生「找不到資料表」的錯誤。如果不修改程式碼,想要解決這個問題的話,就需要在設定檔中(my.cnf)「[mysqld]」的部分加上…
lower_case_table_names=1

表示所有的查詢都要強制轉換成小寫後才執行。

PS. 印象中, ci = character ignore,詞性有沒有用對不清楚,但確定是這兩個單字,表示忽略大小寫差異。

2013年7月3日 星期三

談程式學習…初學與教學 — 學習篇(二)

每次學習一種新的程式語言,都會讓我有「回到新手」的感覺。
工作上「需要早點應用新技術」的壓力,促使我嘗試用其它語言學到的知識,來解釋新的語言,
就結果而論,還滿不錯的,除了加快學習,上手的速度,也能夠對原來的知識有新的了解。
底下分享一些我學習程式的觀點。

練拳不練功,到老一場空… 那程式的基本功是什麼?


前文提到,理解是學習程式的真理。但是新手常面臨到的問題,卻是看似遠無止境的東西需要理解。
就事實而言,程式語言是一種集體創作的產物,所以總是有新的東西出現,可能是一個研究成果,或是一個框架想法。
因此對於新手,甚至是還沒有入門的人而言,我建議先嘗試去解釋基本規則背後用意,能夠講得出來,就表示有一定的理解。
不用太擔心解譯錯誤,當發現自己的解釋有誤,就去修正,這樣會慢慢的接近正確的想法。。
也許在剛開始的時候,不得不混雜著一些死背東西,當解釋的比例越來越多,需要死背的東西也相對減少。

2013年7月1日 星期一

談程式學習…初學與教學 — 學習篇(一)

緣起…學程式也好幾個年頭,有感程式領域之廣,讓人能夠同時體會老手與新手的感覺。
心中的一些想法,想要訴諸文字,希望分享給在程式路上的舊雨新知。
也期望能夠帶給人一些不一樣的想法,也歡迎批評,指教。

先簡單介紹一下自己…
  • 不是生在程式之家,也不是相關科系畢業,學習程式是前半段,只有電腦書而沒有別人討論。
  • 學習程式的資質並不高,常對人說「光一個 Class 的概念,就花了我一年的時間才了解」。
  • 對於自己經歷過一點命令列時代感到幸運,對於下指令,以及之後學習其它作業系統有很大的幫助。
  • 玩遊戲的功力很差,所以常用修改軟體,誤打誤撞讓我明白了記憶、變數的使用。
  • 程式功力不曾進入「高手」的領域,一直在數種不同的程式語言間打轉,被不同平台、框架玩了許多年。
  • 在某種語言前,會是完全的新手,但是在另一種語言前,經驗足夠讓我指導新人、完成專案。
  • 除非是常在講的專有名詞,否則完全記不起來,徹底表現出「看過即忘」的特質。