无法通过 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.3
的 TDS_Version
在你的联系中。
类型time
、date
、datetime2
和datetimeoffset
是在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 或更高版本。
当我尝试在 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.3
的 TDS_Version
在你的联系中。
类型time
、date
、datetime2
和datetimeoffset
是在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 或更高版本。