使用 MySQL 不受支持的语法播放框架演变

Posted

技术标签:

【中文标题】使用 MySQL 不受支持的语法播放框架演变【英文标题】:Play Framework evolutions using unsupported syntax for MySQL 【发布时间】:2016-03-01 13:46:04 【问题描述】:

我使用包含 Ebean ORM 和 mysql Server 5.5 的 Play Framework 2.4 开始了一个项目。

正如 Play 文档所描述的,可以从对象生成数据库,并且可以按预期工作。但是当我尝试插入时间戳时,我遇到了问题,因为 Play 使用的是我的服务器不支持的更新的 mysql 语法。

这是我的模型:

@ManyToOne
@Column(name = "user_send_id")
private User userSendReq;

@ManyToOne
@Column(name = "user_request_id")
private User userGetReq;

@CreatedTimestamp
@Column(name = "date_request")
private Timestamp whenRequest;

@UpdatedTimestamp
@Column(name = "date_friends")
private Timestamp whenFriends;

private boolean request;

这是 Play 为我生成的 MySQL 代码:

create table friends (
user_send_req_id          bigint,
user_get_req_id           bigint,
request                   tinyint(1) default 0,
date_request              datetime(6) not null,
date_friends              datetime(6) not null)
;

当我尝试将进化应用到服务器时,出现以下错误:

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的“(6) not null, date_friends datetime(6) not null)”附近使用正确的语法

有没有办法告诉 Play 只使用 datetime() 而不是 datetime(6) 来生成 SQL Evolution 文件?

【问题讨论】:

【参考方案1】:

这与 Ebean 的关系比与 Play 的关系更大,因为 Play 使用 Ebean 来生成 DDL。为了解决这个问题,您可以在映射模型时显式设置 SQL 类型。只需将columnDefinition 参数用于@Column 注释即可:

@CreatedTimestamp
@Column(name = "date_request", columnDefinition = "datetime")
private Timestamp whenRequest;

@UpdatedTimestamp
@Column(name = "date_friends", columnDefinition = "datetime")
private Timestamp whenFriends;

【讨论】:

以上是关于使用 MySQL 不受支持的语法播放框架演变的主要内容,如果未能解决你的问题,请参考以下文章

播放框架:如何将数据库演化应用到伪造的应用程序测试数据库

android : 使用 SoundPool 播放具有短演变周期的短声音

iOS上的AVAudioRecorder错误“不支持播放数据格式”?

为啥手机chrome 不支持html5的audio音频播放

au为啥加载音频错误

怎么播放微信收到的视频?