前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql从5.7迁移表结构到5.5报错 near ‘(0) NULL DEFAULT NULL’

mysql从5.7迁移表结构到5.5报错 near ‘(0) NULL DEFAULT NULL’

作者头像
宣言言言
发布2020-01-13 15:55:28
2.7K0
发布2020-01-13 15:55:28
举报
文章被收录于专栏:宣言(Siam)博客宣言(Siam)博客

问题由来

问题如标题所示,在开发过程的时候,需要创建一张表,从另一个环境导出的表结构sql文件,在我电脑上导入,遇到该报错

代码语言:javascript
复制
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 '(0) NULL DEFAULT NULL'

报错的那一行内容为

代码语言:javascript
复制
`refund_success_time` datetime(0) NULL DEFAULT NULL COMMENT '退款成功时间',

宣言博客 Siam 原文链接:https://cloud.tencent.com/developer/article/1571987

排查思路

将导出的sql导入回原来的环境中(另开一个数据库),测试结果:正常

那么sql语句一般是正常没问题的, 一般是环境差异导致的,如(版本不同)

原来的表创建过程是使用软件可视化的,datetime长度这里没有填写,默认是为0,所以首先是对这个的不理解

从这里去找了资料,发现对datetime长度的说明资料很少,但还是有一个百度回答说到了(虽然不够准确)

原文为:

在navicat里面datetime的长度好像指的是秒后面的小数点位数,可以设置为0-6位

不准确的地方有以下

  • 并不是在navicat这个软件里,而是mysql数据库中
  • 在mysql数据库中也会有不同的版本差异(导致这篇文章遇到问题的原因)
  • 所用词“好像指的是”,代表回答该问题的前辈并没有找过官方文献、测试

官方文献

宣言为了测试该问题,并准确定位和分析,找到了mysql官方的文献,原文为:

11.2.7 Fractional Seconds in Time Values MySQL 5.6 has fractional seconds support for TIME, DATETIME, and TIMESTAMP values, with up to microseconds (6 digits) precision: To define a column that includes a fractional seconds part, use the syntax type_name(fsp), where type_name is TIME, DATETIME, or TIMESTAMP, and fsp is the fractional seconds precision. For example:

重点为第一句,mysql在5.6后支持了小数秒,精度高达微秒(6位)

解决该问题

解决该问题(或者说从根源上避免遇到此类问题),应该保证开发环境的一致,同一项目的所有开发人员都应该保持所有环境的版本号一致(最好精确到小版本)

如果只是为了临时在mysql5.5完成测试,并且确认业务程序不需要使用到时间的小数秒,可以将sql文件中的长度设置删除,然后导入

代码语言:javascript
复制
datetime(0) NULL DEFAULT NULL
改为 datetime NULL DEFAULT NULL
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题由来
  • 排查思路
  • 官方文献
  • 解决该问题
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档