【问题标题】:Inserting UNICODE into Oracle from C/C++ shows garbage in DB从 C/C++ 将 UNICODE 插入 Oracle 会在 DB 中显示垃圾
【发布时间】:2017-01-20 10:33:15
【问题描述】:

我有以下示例程序...

int main(void)
{
    char insertQuery[] = "INSERT INTO ABCD_TABLE VALUES('987','31-AUG-16','19-JAN-17','901',
'31-DEC-12','1',\'\',\'\',\'\',\'\',\'\',\'\',\'ÜÜcreate02_de,ää\')";
    connectToSQLServer();
    executeINSERTQuery(insertQuery);
    return 0;
}

当我运行程序时,查询已成功插入数据库,但ÜÜ 显示为垃圾。

当我在Toad 中手动运行相同的查询时,它会正确插入,ÜÜ 会在Toda 中正确显示。

"INSERT INTO ABCD_TABLE VALUES('987','31-AUG-16','19-JAN-17','901','31-DEC-12','1','','','','','','','ÜÜcreate02_de,ää')";

可能是什么问题? 如果你们需要connectToSQLServer() 和executeINSERTQuery(insertQuery) 的代码示例,请告诉我。我会提供的。

【问题讨论】:

    标签: c++ oracle unicode oracle-pro-c


    【解决方案1】:

    您已将 NLS_LANG 变量设置为 ALL32UTF8。还有一种方法可以在 OCI 级别执行此操作,请参阅:OCIEnvNlsCreate 和 Database Globalization Support Guide。

    通过这样做,您直到告诉 OCI 驱动程序您存储在缓冲区中的所有内容都是 UTF8 字符集,并且从数据库中提取的所有内容也必须是 UTF8。

    PS:请注意,某些 OCI api 函数确实区分字节数和字符数。因此,例如,您不得使用 OCILobRead/OCILobWrite 来操作 CLOBS。您必须使用扩展版本 OCILobRead2/OCILobWrite2。

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 2020-02-03
      • 1970-01-01
      • 2023-04-02
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多