MySQL 超新手入門(7)字元集與資料庫
專欄作者新書出版:Android App程式開發剖析 第三版(適用Android 8 Oreo與Android Studio 3) MySQL 超新手入門(6)CRUD 與資料維護 << 前情 1 Character Set與Collation任何資訊技術在處理資料的時候,如果只是單純的數值和運算,那就不會有太複雜的問題;如果處理的資料是文字的話,就會面臨世界上各種不同語言的問題。以資料庫來說,它必須正確的儲存各種不同語言的文字,也就是一個資料庫中,有可能同時儲存繁體和簡體中文、法文等不同語言的文字。 電腦在處理文字資料大多是使用一個「編碼」來表示某一個字,對MySQL資料庫來說,為了要處理不同語言的文字,它使用一套編碼來處理一種語言的文字,稱為「字元集、character set」。以英文字母來說,每一個字母都有一個編碼,例如A=65、B=66、C=67。 MySQL可以依照你的需要為資料庫設定不同的字元集: Collation指的是在一個字元集中,所有字元的大小排序規則。以英文字母來說,我們會依照A到Z的順序當成大小的順序,小寫的字母也是一樣的。這樣的大小順序是依照編碼的大小來決定的,MySQL把它稱為「binary collation」。 可是在真實的世界中,大小順序卻不是這麼單純,有時候你會把大小寫的英文字母當成是一樣的,例如大寫的A和小寫的a。在這種情況下,大寫和小寫的字母會被當成是一樣的大小,然後再依照編碼來決定,例如大寫A的編碼比小寫a的編碼小。MySQL把這樣的方式稱為「case-insensitive collation」。 在決定大小順序的時候,如果只有考慮字母大小寫因素的話,那還不算是太複雜的。如果再考慮各種不同語言特性的話,在決定大小順序的時候就會變得很複雜。以繁體中文來說,它是沒有區分大小寫的,而且一個中文字會包含一個以上的位元組,其它的語言也都會有類似的情況。 1.1 Character SetMySQL資料庫把各種不同字元集的編碼資料紀錄在系統資料庫中,你可以使用下列的指令查詢MySQL資料庫支援的字元集資訊: SHOW CHARACTER SET 執行上列的查詢指令後可以得到下列的結果: 1.2 COLLATIONMySQL除了支援各種不同的字元集,讓資料庫可以儲存不同語言的文字外,每一種字元集都可以依照實際需要,搭配不同的Collation設定。你可以使用下列的指令查詢MySQL支援的Collation資訊: SHOW COLLATION 執行上列的查詢指令後可以得到下列的結果: 你也可以使用類似「WHERE」子句中的條件設定,查詢某一種字元集支援的Collation資訊: 你可以從Collation名稱分辨出排序的準則: 2 資料庫資料庫(Database)是用來保存各種資料元件的容器,在安裝好MySQL資料庫伺服器軟體後,就可以依照自己的需求建立資料庫,MySQL對於資料庫的數量並沒有限制: 每一個MySQL資料庫伺服器軟體都會使用一個儲存資料的資料夾,稱為「data directory」。在這個資料夾下,每建立一個資料庫,MySQL都會建立一個資料夾,稱為「資料庫資料夾、database directory」,一個資料庫包含的檔案就會放在各自的資料庫資料夾中: 註:使用「SHOW VARIABLES LIKE ‘datadir’」敘述,可以查詢MySQL資料庫伺服器使用的資料庫資料夾。 因為一個資料庫會是檔案系統中的一個資料夾,所以你要特別留意下列的特性:
註:MySQL把「DATABASE」與「SCHEMA」當成是一樣的,所有你在後續使用的指令,都可以把「DATABASE」換成「SCHEMA」。 2.1 建立資料庫下列是建立資料庫的語法: 在你執行新增資料庫的指令以後,MySQL會使用你指定的資料庫名稱建立一個資料庫資料夾: 如果你指定的資料庫名稱已經存在了,MySQL會產生一個錯誤訊息: 為了避免上列的錯誤,你可以在建立資料庫的時候加入「IF NOT EXISTS」,如果你指定的資料庫名稱不存在,同樣會建立新的資料庫;如果已經存在,MySQL只會產生警告訊息: 你可以在建立資料庫的時候指定資料庫預設的字元集與collation,如果沒有指定的話,就會使用MySQL伺服器預設的設定: 註:如果沒有修改過MySQL設定的話,預設的字元集是「latin1」,Collation是「latin1_swedish_ci」。 建立資料庫的時候指定字元集與collation會有一些不同的組合,例如下列只有指定字元集的話,MySQL會使用你指定字元集的預設collation: 另外一種是只有使用「COLLATE」指定collation,MySQL會使用你指定collation所屬的字元集: 註:建立資料庫的時候,不管你有沒有指定,資料庫都會有預設的字元集與collation。以後在這個資料庫建立的表格,都會使用資料庫預設的字元集與collation。 2.2 修改資料庫建立資料庫以後,你唯一能執行的修改是資料庫預設的字元集與collation。下列是修改資料庫設定的語法: 下列的敘述執行修改資料庫預設的字元集與collation。在修改的時候,如果只有指定字元或只有指定collation的話,設定的規則與建立資料庫一樣: 註:修改資料庫的字元集是或Collation,並不會影響原來已經存在的表格。 2.3 刪除資料庫下列是刪除資料庫的語法: 如果在刪除資料庫的敘述中指定的資料庫名稱不存在,MySQL會產生一個錯誤訊息: 為了避免上列的錯誤,你可以在刪除資料庫的時候,加入「IF EXISTS」指令,如果你指定的資料庫名稱存在,同樣會刪除指定的資料庫;如果不存在,MySQL只會產生警告訊息: 註:執行刪除資料庫的敘述,MySQL不會再跟你確認是否刪除資料庫,而是直接刪除;刪除資料庫以後,表示資料庫資料夾也會從檔案系統中刪除,除非你另外還有這個資料庫的備份,否則原來在資料庫中的所有資料就全部消失了。 2.4 取得資料庫資訊MySQL提供「SHOW」指定讓你取得跟資料庫相關的資訊,執行下列的指令可以取得MySQL伺服器中所有資料庫的名稱: 你也可以執行下列的指令取得建立資料庫的敘述: MySQL資料庫伺服器有一個很重要的資料庫,名稱為「information_schema」,這個資料庫通常會把它稱為「系統資料庫」,資料庫中儲存伺服器所有重要的資訊。跟資料庫相關的資訊儲存在「SCHEMATA」表格中,所以你可以使用查詢敘述取得所有資料庫的相關資訊:
|
楊為巽
02/07
感謝教學,希望能有更多的教學文章!