【问题标题】:SQL Column truncates Varchar value after first characterSQL Column 在第一个字符后截断 Varchar 值
【发布时间】:2012-07-24 22:28:53
【问题描述】:

我正在尝试插入一列,但我只看到我正在插入的字符串的第一个字符。一段时间以来,我一直在努力解决这个问题。

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

验证只是我定义的一个断言。 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 变得更普遍使用时代码不会中断。提前谢谢你。

【问题讨论】:

  • 如果您采用 Unicode 并使用非 NVARCHAR 字段,则数字“1”字符(u0031 或 little-endian 系统中的 0x3100)的 NULL (0x00) 部分可能不是作为字符串终止符?
  • 好问题,我会找出答案的。
  • 所以我将其更改为 NVarchar 并停止截断。我觉得自己很愚蠢。

标签: c++ sql unicode odbc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2016-02-19
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多