无法使用c ++程序将128以上的ascii字符插入到oracle数据库中

时间:2011-10-04 07:28:16

标签: c++ database oracle ascii

我正在尝试使用C ++程序(字符为Ø,Å)在ascii范围128上插入字符。它适用于小于128的ascii字符

数据库中使用的数据类型是VARCHAR2

这些字符作为问号(????)插入到DB中 如果我通过Toad在DB中使用这些字符设置字段值并尝试使用应用程序读取它们被读作问号(????)

有人可以给我一个示例代码,说明如何插入包含这些字符的字符串(ascii值大于128)。

我认为数据类型转换有问题。 (因为在插入到DB之前的应用程序级别中,这些字符正确显示。如果我通过Toad设置字段值并从DB读取它们被读作问号。我可以在DB中设置字段值意味着DB列可以保存这些字符)

我在我的应用程序中使用以下定义和绑定方法

OCIDefineByPos(p_sql,& p_dfn,p_DBCon-> p_err,iPos, (dvoid *)p-> un_DataArray.pzValue,(剑)iSize,SQLT_STR,(dvoid *)p-> un_FlagArray.pssValue,0,0, OCI_DEFAULT);

OCIBindByName(p_sql,& p_bnd,p_DBCon-> p_err,(text *)zName, -1,(dvoid *)zValue,iSize,SQLT_STR,0,0,0,0,0,OCI_DEFAULT);

有人能帮助我吗? 或者如果您有一些示例程序可以插入最多256个ascii值,请与我分享

2 个答案:

答案 0 :(得分:0)

WE8MSWIN1252对应于“MS Windows Code Page 1252 8位西欧”。 在将它们插入数据库之前,必须将字符串转换为Windows代码页。

例如,在Windows上,如果您的字符串是utf8,那么使用MultiByteToWideChar将它们转换为utf16,然后使用WideCharToMultiByte将其转换为CodePage1252

答案 1 :(得分:0)

这可能是因为,128以上没有ascii字符.ASCII是7位编码。

为了添加非ascii字符(ASCII中没有Ø,Å),你需要使用不同的编码来放入它们。现在大多数理智的应用程序都使用utf8。