【问题标题】:OCaml - Timestamp field anomaly with ocaml-mysqlOCaml - 使用 ocaml-mysql 的时间戳字段异常
【发布时间】:2016-02-11 16:49:04
【问题描述】:

我在使用 ocaml-mysql(最新版​​本)库执行以下 MySQL 语句时遇到问题:

  let dump_to_db text =
      let insert = P.create db (s "INSERT INTO Temperature VALUES (?,?,?,?)") in
        ignore (P.execute insert [| "NULL"; "xxx.xxx.xxx.xxx"; text ; "CURRENT_TIMESTAMP" |])

我的问题是时间戳字段设置不正确。显然,无论我在最后一个字段中写入什么(可能是“CURRENT_TIMESTAMP”或只是“NULL”),我都无法获得正确的结果。

发生的情况是查询被执行,我在表中看到的是一个 NULL 填充的 Timestamp 字段(即使我不知道它怎么可能,因为它被定义为一个 NOT NULL 列)。

我的表结构如下:

CREATE TABLE `Temperature` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `IP` varchar(100) DEFAULT NULL,
  `Value` varchar(100) DEFAULT NULL,
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

【问题讨论】:

    标签: mysql ocaml


    【解决方案1】:

    Prepared.execute 采用值不是任意表达式(函数调用)的数组。字符串值“CURRENT_TIMESTAMP”被转换为时间戳,因为它不被识别为有效数字,所以变成零。 正确传递NULL,它将根据CREATE TABLE默认初始化: P.execute_null insert [| None; Some "xxx.xxx.xxx.xxx"; Some text ; None |]

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2015-09-05
      相关资源
      最近更新 更多