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 要求 X 协议连接的字符集为 utf8mb4。使用此类连接加载 latin1 编码的 world.sql 文件会产生错误。

    使用 mysqldump 以及 --default-character-set=utf8mb4 选项设置字符集,并使用 --set-charset 使转储包含 SET NAMES 以用于该字符集,这将写入一个 utf8mb4 编码的转储文件。将 world.sql 的编码更改为 utf8mb4 允许它在 MySQL Shell 中使用 X 协议连接加载而不会出现错误。

  • 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 即可。