0%

MySQL8不支持语法

MySQL8不支持语法


1. 不支持 ROW_FORMAT=FIXED 行格式。

https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html

image-20201119170957127

DEFAULT、DYNAMIC、COMPACT、REDUNDANT、COMPRESSED。

2. 编码、字符集 需统一。

字符集不统一将无法比较、排序。

个别表存在字段编码,需统一改为 utf8mb4

优先级顺序为:数据库字符集 < 表字符集 < 列字符集;

3. 更新数据时记录当前更新时间
1
ALTER TABLE `canal`.`user_4` MODIFY COLUMN `dateline` datetime(0) NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '时间' AFTER `intro`

注意:利用 canal 处理数据,因为其解析 binlog 使历史数据 dateline 值不准同主库有差异。这种表结构,在主从同步时,若从库执行慢也会导致主从库数据不同。

4. 语法错误SQL无法执行更新
1
UPDATE `canal`.`user_4` SET `age` = 1811 WHERE `id` = 1

错误信息:SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column ‘age’ at row 1

通过 Navicate 修改表数据(主库:mysql-5.6)age = 1811 时,age 字段值被更新为其存储的最大值 255, 但 binlog=mixed 模式下依旧记录着上述语句。binlog=row 模式下 age = 255

从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度将失效。

image-20210918132910288

注意

  1. 表分区问题。