OCaml - 时间戳字段异常与 ocaml-mysql
OCaml - Timestamp field anomaly with ocaml-mysql
我在使用 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"),我都无法获得正确的结果。
发生的事情是查询得到执行,我在 table 中看到的是一个 NULL 填充的时间戳字段(即使我不知道它怎么可能,因为被定义为 NOT NULL列)。
我的table结构如下:
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
Prepared.execute
采用值不是任意表达式(函数调用)的数组。字符串值 "CURRENT_TIMESTAMP" 被转换为时间戳,并且由于无法识别为有效数字,因此被转换为零。
正确传递 NULL
,它将根据 CREATE TABLE
默认初始化:
P.execute_null insert [| None; Some "xxx.xxx.xxx.xxx"; Some text ; None |]
我在使用 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"),我都无法获得正确的结果。
发生的事情是查询得到执行,我在 table 中看到的是一个 NULL 填充的时间戳字段(即使我不知道它怎么可能,因为被定义为 NOT NULL列)。
我的table结构如下:
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
Prepared.execute
采用值不是任意表达式(函数调用)的数组。字符串值 "CURRENT_TIMESTAMP" 被转换为时间戳,并且由于无法识别为有效数字,因此被转换为零。
正确传递 NULL
,它将根据 CREATE TABLE
默认初始化:
P.execute_null insert [| None; Some "xxx.xxx.xxx.xxx"; Some text ; None |]