无法通过 linux 上的 FreeTDS bcp API 将 DATE 插入 mssql

Can`t insert DATE to mssql via FreeTDS bcp API on linux

当我尝试在 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,但没有。 ..

我可以插入日期,如果您遇到同样的问题,您应该转换为 UCS2。

Before data status

After

要使用 SQL 服务器 date 字段,您必须至少使用 FreeTDS 版本 0.95 并指定至少 7.3TDS_Version在你的联系中。

类型timedatedatetime2datetimeoffset是在SQL Server 2008中引入的,这是第一个支持TDS版本的版本7.3:

https://www.freetds.org/userguide/choosingtdsprotocol.htm

您连接的 TDS 版本可能低于 7.3,或者如果您指定的 TDS 版本为 8.0,它实际上映射到 7.1。尝试明确设置为版本 7.3,并确保您的 FreeTDS 版本为 0.95 或更高版本。