iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0

MySQL Character Set 與 Collation

  1. Character Set sqlSHOW CHARACTER SET: 各種不同字元集的編碼資料紀錄在系統資料庫中
  2. COLLATION sqlSHOW COLLATION: 指的是在一個字元集中,所有字元的大小排序規則。

資料庫

  1. 建立資料庫
    CREATE DATABASE DB名稱 IF NOT EXISTS
    CHARACTER SET 字元集名稱(utf8)
    COLLATE collation名稱(utf8_unicode_ci)
    
  2. 修改資料庫
    1. 建立資料庫以後,你唯一能執行的修改是資料庫預設的字元集與collation
    ALTER DATABASE 資料庫名稱
    CHARACTER SET 字元集資料庫
    COLLATE collation名稱
    
  3. 刪除資料庫
    1. 執行刪除資料庫的敘述,MySQL不會再跟你確認是否刪除資料庫,而是直接刪除;刪除資料庫以後,表示資料庫資料夾也會從檔案系統中刪除,除非你另外還有這個資料庫的備份,否則原來在資料庫中的所有資料就全部消失了。
    DROP DATABASE IF EXISTS 資料庫名稱
    
  4. 取得資料庫訊息
    1. SHOW DATABASES, SHOW SCHEMAS:可以取得MySQL伺服器中所有資料庫的名稱
    2. 系統資料庫(information_schema): 資料庫相關的資訊儲存在「SCHEMATA」表格中
      1. sqlSELECT * FROM informatio_SCHEMATA

儲存引擎與資料型態

表格與儲存引擎

  • table: 是資料庫中用來儲存紀錄的基本單位
  • Storage engine、儲存引擎: 為了資料庫多樣化的應用,你可以在建立表格的時候,依照自己的需求指定一種儲存引擎,不同的儲存引擎會有不同的資料儲存方式與運作的特色。
  1. MyISAM:
    1. MySQL預設的儲存引擎
    2. 具有「可攜性、portable」的特色,你可以很容易的把一個資料庫複製到另外一台電腦的MySQL伺服器中
  2. InnoDB: 提供的功能
    1. 像是交易(transaction)、紀錄鎖定(row-level locking) 與自動回復(auto-recovery)
    2. 使用「InnoDB」儲存引擎的表格會使用同一個儲存空間,所以不同資料庫的表格資料也會儲存在一起。「InnoDB」儲存引擎限制在這個共用的儲存空間中不能超過兩百萬個表格
  3. MEMORY
    1. 運作的效率是最快的;不過只要MySQL伺服器關閉後,儲存的資料就全部不見
    2. 檔案系統中儲存的檔案只有「frm」檔,也就是儲存表格結構資訊的檔案
  4. 儲存引擎與作業系統
    1. 如果MySQL資料庫軟體在建立或使用資料庫檔案的時候,超過作業系統的限制,就會發生錯誤
    2. 以作業系統的限制來決定儲存引擎
      1. 「MyISAM」儲存引擎可以避免違反檔案大小的限制
      2. 「InnoDB」儲存引擎可以避免違反檔案數量的限制
      3. 在檔案數量與大小的限制都遇到問題的話,你只好增加硬體和修改作業系統在檔案系統上的設定

欄位資料型態

建立表格時,你會幫每一個欄位指定適合的「資料型態、data type」

  1. 數值
    1. 整數型態: TINYINT(4)(i), SMALLINT(6)(i2), MEDIUNINT(9)(i3), INT(11)(i4), 'BIGINT'(20)(i5)
    2. 浮點數型態(可以儲存小數): FLOAT(f), DOUBLE(f2), DECIMAL(f3)
      1. 不可以超過最大長度
      2. 小數位數不可以超過長度
      3. 長度與小數位數一樣的時候,表示只可以儲存小數,例如「0.123」
    3. 可以設定為「只能儲存正數」,任何希望儲存負數的動作都會造成錯誤
    4. 「ZEROFILL」: 補零,依照長度填滿0
  2. 位元:
    1. 以二進位的型式儲存資料,也就是只有0跟1兩種資料。
    2. 範例: 使用'b'開始,後面在兩個單引號之間填入 0 與1 的二進位值
      INSERT INTO bittable
      VALUES
      (1, 255, 65536),
      (b'1', b'11111111', b'1111111111111111')
      
  3. 字串
    1. 「非二進位制、non-binary」: 儲存一般文字的字串
      1. 固定長度: CHAR(s),會使用空格補滿
      2. 變動長度: VARCHAR(s2), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
      3. 「LENGTH」函式: 傳回字串資料實際的儲存長度(byte)
      4. 「CHAR_LENGTH」函式: 查詢字串的字元數量的話
    2. 「二進位制、binary」: 儲存圖片或音樂這類資料
      1. 固定長度: BINARY
      2. 變動長度: ‵VAEBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB`
  4. 列舉 (ENUM)與 集合(SET)
    1. 列舉 (ENUM)
      1. 特殊的「非二進位制、non-binary」字串型態
      2. 除了規定的內容以外都不可以儲存
      3. 真正儲存在資料庫中的資料卻是成員的編號,所以指定列舉型態欄位為排序欄位的時候,資料庫會使用編號來排序,而不是以成員的字串值
      4. 服裝的大小就會以S、M與L來表示小、中與大,適合使用「ENUM」型態,範例:
        INSERT INTO enumtable
        VALUES('XS', 'XS'), ('S','S'), ('M', 'M'), ('L', 'L'), ('XL', 'XL');
        
    2. 集合(SET)
      1. 可以設定一組成員,不過它可以儲存多個成員資料,例如: 可教學科目可以複選
      2. 使用二進位的方式儲存成員編號,數值來代表多個成員的時候,你只要把所有成員的數字加總起來就可以
      3. 字元集的設定可以決定可以儲存字串資料的編碼,而collation的設定會決定字串值是否區分大小寫
      4. 範例
        INSERT INTO estable
        VALUES (1, 1, 21, 21), 
               ('M','M','MON','Mon'),
               ('m','M','mon','MON')
        
  5. 日期與時間
    1. DATE: 範圍從「1000-01-01」到「9999-12-31」
    2. TIME
      1. 範圍從「-838:59:59」到「838:59:59」
      2. MySQL的時間型態欄位可以讓你儲存類似「經過的時間」
    3. DATETIME
      1. 範圍從「1000-01-01 00:00:00」到「9999-12-31 23:59:59」
      2. 時間部份的時、分、秒都可以省略,省略的部份,MySQL都會幫你設定為「0」
    4. YEAR
      1. 只儲存年份資料
      2. 兩位數字的範圍從「00」到「99」,實際的西元年份是「1970」到「2069」
    5. TIMESTAMP
      1. MySQL日期與時間型態中具有「時區」特性的型態
      2. 儲存「TIMESTAMP」型態欄位的資料時,過程中會有一些計算的動作
      3. 使用查詢敘述取得MySQL資料庫伺服器關於時區的設定,以下式查詢MYSQL預設的時區設定與 查詢連線用戶端的時區設定
        SELECT @@GLOBAL.TIME_ZONE, @@SESSION.TIME_ZONE
        
      4. 想要設定其它的時區,可以使用「+時時:分分」或「-時時:分分」的格式
        SET SESSION TIME_ZONE = '+00:00';
        SET GLOBAL TIME_ZONE = '+00:00';
        

上一篇
MySQL
下一篇
Day16. MySQL: 表格與索引
系列文
網頁服務開發之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言