2012-07-24 51 views
0

我试图插入到列中,而我只看到了我插入的字符串的第一个字符。我现在一直在抨击这个问题。SQL Column截断第一个字符后的Varchar值

在我的程序中定义了Unicode。我正在使用ODBC和Sybase SQLAnywhere。该程序运行时没有编译器错误,并且我试图插入的列采用varchar。我在Windows Server 2003上使用odbc32.lib中的SQLBindParameter(WARNING :: legacy code incoming)。

验证只是我定义的断言。 EFields是std :: map,其中TSTRING被定义为

typedef std::basic_string<TCHAR> TSTRING; 

这是我的ODBC代码。

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); 

被传入的字符串是一个IP(这个字符串以10.1开头)。我被要求使用varchar,以便在IPV6变得更常用时代码不会中断。先进的谢谢你。

+1

如果您正在使用Unicode并使用非NVARCHAR字段,则可能不会将数字“1”字符(u0031或小端系统中的0x3100)的NULL(0x00)部分视为字符串终结符? – DaveE 2012-07-24 23:23:02

+0

好问题,我会发现的。 – AlexLordThorsen 2012-07-25 16:11:11

+0

所以我将它改为NVarchar并停止截断。我感到非常愚蠢。 – AlexLordThorsen 2012-07-25 16:52:39

回答

0

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