C++ SQL列截断第一个字符后的Varchar值

C++ SQL列截断第一个字符后的Varchar值,c++,sql,unicode,odbc,C++,Sql,Unicode,Odbc,我试图插入到一个列中,但只看到插入的字符串的第一个字符。我对这个问题绞尽脑汁已经有一段时间了 在我的程序中,定义了Unicode。我正在使用ODBC和Sybase SQLAnywhere。程序运行时没有编译器错误,我试图插入的列采用varchar。我正在windows server 2003上使用odbc32.lib中的SQLBindParameter(警告::旧代码传入) Verify只是我定义的断言。EFields是一个std::map,其中TSTRING定义为 typedef std::b

我试图插入到一个列中,但只看到插入的字符串的第一个字符。我对这个问题绞尽脑汁已经有一段时间了

在我的程序中,定义了Unicode。我正在使用ODBC和Sybase SQLAnywhere。程序运行时没有编译器错误,我试图插入的列采用varchar。我正在windows server 2003上使用odbc32.lib中的SQLBindParameter(警告::旧代码传入)

Verify只是我定义的断言。EFields是一个std::map,其中TSTRING定义为

typedef std::basic_string<TCHAR> TSTRING;

传入的字符串是IP(该字符串以10.1开头)。我被要求使用varchar,这样当IPV6变得更普遍时,代码就不会中断。高级谢谢。

在数据库中从Varchar更改为Nvarchar解决了我的问题。

如果使用Unicode并使用非Nvarchar字段,数字“1”字符(u0031或小端系统中的0x3100)的NULL(0x00)部分是否可以作为字符串终止符?问得好,我会查出来的。所以我把它改成了NVarchar,它停止了截断。我觉得自己很愚蠢。
bufSize = sizeof(TCHAR) * (EFields.find(_T("clientipaddress"))->second.length()); //not null terminated
VERIFY(::SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_VARCHAR, EFields.find(_T("clientipaddress"))->second.length() , 0 , 
        (SQLPOINTER)EFields.find(_T("clientipaddress"))->second.c_str(), bufSize, NULL) == SQL_SUCCESS);