一、问题描述
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;
反馈内容如下:
大致如下:
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
二、解决过程
- 排查脚本,没问题;
- 版本排查,现场是MySQL5.5,手动执行,没问题;
- 本地复现
断点报错显示 ZWNBSP的特殊字符,控制台是打印不出来的。搜了一下https://blog.youkuaiyun.com/weixin_39519741/article/details/114221401;UTF-8有一个BOM(Byte Order Mark)的问题;看了一下文件格式果然是UTF8BOM格式。可以通过文本编辑器改一下。
UTF8BOM格式的文件, idea右键文件,有个Remove BOM的菜单,也可以。
再次执行就OK了。
4. 最终执行脚本的地方。