2012-07-24 35 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解決了我的問題。