MySQL8不支持语法
1. 不支持 ROW_FORMAT=FIXED
行格式。
https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html
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类型的显示宽度将失效。
注意
- 表分区问题。