由UTF8BOM文件格式引发的线上脚本执行失败

一、问题描述

MySQL数据库升级是采用脚本升级的方式,每次发布,是代码读取sql脚本,然后执行脚本,最后记录脚本名称,下次执行是查重。这次升级的时候反馈脚本执行失败,提示sql语法错误。

下面是脚本内容:

CREATE TABLE `ds_t_ai_model_service_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `code` varchar(255) DEFAULT NULL COMMENT '服务标识',
  `name` varchar(255) DEFAULT NULL COMMENT '服务名称',
  `parent_id` int(11) DEFAULT NULL COMMENT '父节点id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

反馈内容如下:

由UTF8BOM文件格式引发的线上脚本执行失败_第1张图片

 大致如下:

Error executing: 
CREATE TABLE `ds_t_ai_model_service_type` (
`id` int(11) NOT NULL COMMENT '自增主键',
`code` varchar(255) DEFAULT NULL COMMENT '服务标识',
`name` varchar(255) DEFAULT NULL COMMENT '服务名称',
`parent_id` int(11) DEFAULT NULL COMMENT '父节点id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
CREATE TABLE `ds_t_ai_model_service_type` (
`id` int(11) NOT NULL COMMENT ' at line 1

二、解决过程

  1. 排查脚本,没问题;
  2. 版本排查,现场是MySQL5.5,手动执行,没问题;
  3. 本地复现

由UTF8BOM文件格式引发的线上脚本执行失败_第2张图片

断点报错显示 ZWNBSP的特殊字符,控制台是打印不出来的。搜了一下https://blog.csdn.net/weixin_39519741/article/details/114221401;UTF-8有一个BOM(Byte Order Mark)的问题;看了一下文件格式果然是UTF8BOM格式。可以通过文本编辑器改一下。

由UTF8BOM文件格式引发的线上脚本执行失败_第3张图片

UTF8BOM格式的文件, idea右键文件,有个Remove BOM的菜单,也可以。

由UTF8BOM文件格式引发的线上脚本执行失败_第4张图片

 再次执行就OK了。

由UTF8BOM文件格式引发的线上脚本执行失败_第5张图片

 4. 最终执行脚本的地方。

由UTF8BOM文件格式引发的线上脚本执行失败_第6张图片

你可能感兴趣的:(MySql,mysql,数据库,sql)