3 歷史

2016 年 9 月

先前的版本使用大小寫混合的表格名稱。由於 MySQL Shell 區分大小寫,表格名稱已變更為小寫。

2019 年 12 月

已變更 world.sql 檔案以解決數個問題

  • world 資料庫使用 latin1,但 MySQL 8.0 版起使用 utf8mb4 的預設字元集。將資料庫轉換為使用 utf8mb4 可使其與 MySQL 8.0 版同步,同時保留與較舊系列的相容性。

    將資料庫轉換為 utf8mb4 的步驟如下:

    USE world;
    
    -- turn off foreign key checking; otherwise, the ALTER TABLE
    -- statements fail with incompatible foreign key errors.
    SET SESSION foreign_key_checks=0;
    
    -- convert database and tables to utf8mb4
    ALTER DATABASE world CHARACTER SET utf8mb4;
    ALTER TABLE city CONVERT TO CHARACTER SET utf8mb4;
    ALTER TABLE country CONVERT TO CHARACTER SET utf8mb4;
    ALTER TABLE countrylanguage CONVERT TO CHARACTER SET utf8mb4;
    
    -- re-enable foreign key checking
    SET SESSION foreign_key_checks=0;
  • MySQL Shell 需要 utf8mb4 字元集才能進行 X Protocol 連線。使用此類連線載入 latin1 編碼的 world.sql 檔案會產生錯誤。

    使用 mysqldump 並搭配 --default-character-set=utf8mb4 選項來設定字元集,以及 --set-charset,以便傾印包含該字元集的 SET NAMES,這會寫入一個 utf8mb4 編碼的傾印檔案。將 world.sql 的編碼變更為 utf8mb4,允許使用 X Protocol 連線在 MySQL Shell 中載入時不會發生錯誤。

  • MySQL 8.0.17 版已棄用這些功能:

    • 浮點數欄位定義中的位數;例如 FLOAT(10,2)

    • 整數欄位定義中的顯示寬度;例如 INT(10)

    world.sql 檔案使用了這兩種功能,導致 MySQL 8.0.17 及更高版本中出現載入警告。

    為了避免 FLOAT 欄位中的位數,必須手動修改相關欄位。方法如下,將 FLOAT(M,D) 變更為 DECIMAL(M,D)

    USE world;
    
    ALTER TABLE country
      MODIFY SurfaceArea DECIMAL(10,2) NOT NULL DEFAULT '0.00',
      MODIFY LifeExpectancy DECIMAL(3,1) DEFAULT NULL,
      MODIFY GNP DECIMAL(10,2) DEFAULT NULL,
      MODIFY GNPOld DECIMAL(10,2) DEFAULT NULL;
    ALTER TABLE countrylanguage
      MODIFY Percentage DECIMAL(4,1) NOT NULL DEFAULT '0.0';

    若要在傾印檔案中產生不含顯示寬度的整數欄位定義,只需使用 MySQL 8.0.19 或更高版本的 mysqldump 即可。