【发布时间】:2019-11-09 13:51:14
【问题描述】:
当我尝试在 Linux 上通过 FreeTDS bcp 插入 DATE 时,我遇到了这个错误:
Conversion failed when converting date and/or time from character string.
create table test (c_date date);
此列的绑定类型是SYBCHAR,在windows上我没有问题但我使用WinApi
...
char buff[10];
time_t time = ACE_OS::time(nullptr);
struct tm *tmp = localtime(&time);
strftime(buff, 10, "%Y-%m-%d", tmp); /// example: 2008-10-22
bcp_collen(db, 10, 1);
bcp_colptr(db, reinterpret_cast<BYTE*>(buff), 1);
bcp_sendrow(db);
bcp_batch(db); /// here the exception is thrown
我尝试使用另一种日期格式模式,例如%Y%m%d、%Y/%m/%d 等,另一种绑定类型,在 freetds.conf 附近创建 locales.conf,但什么都没有……
【问题讨论】:
-
明确的日期格式是
YYYYMMDD,而不是YYYY-MM-DD。对于日期+时间类型,明确的格式是 ISO8601(即YYYY-MM-DD HH:mm......)。删除 ISO8601 中的日期分隔符也可以。 -
@PanagiotisKanavos 我也尝试过这种格式,但不幸的是我遇到了同样的错误
标签: c++ sql-server bcp freetds