再QT中使用ODBC来查询ORACLE数据库时,当字段是中文时,查询出来的数据的乱码,可以使用以下集中方法:
1、更改注册表中数据库的字符集(不推荐),因为很可能我们更改了字符集后会影响其它操作数据库的程序:
regedit 打开注册表编辑,找到项目
HKEY_LOCAL_MACHINE -> SOFTWARE -> oracle -> KEY_OraClient11g_home1 -> NLS_LANG
把原先的值 SIMPLIFIED CHINESE_CHINA.ZHS16GBK, 改为SIMPLIFIED CHINESE_CHINA.AL32UTF8
2、自己编译QOCI驱动来操作ORACLE数据库,前面文章有介绍如何编译QOCI驱动,这个可以正常操作中文字段。
3、如果你特别想使用QODBC驱动来操作oracle数据库,你也可以自己编译QODBC驱动,我这里使用qt5.12.11没有编译完成,遇到了一些问题。但是在不编译驱动的情况下我们可以使用编码转换函数来完成我们的操作:
(1)、使用CONVERT()字符集转换函数来完成:
比如name字段的值为中文,当我们直接查询时会显示乱码:
select name from student;
我们在查询语句中对中文字段使用字符集转换函数,查询出来的数据就不会乱码:
select CONVERT(name, 'AL32UTF8') from student;
插入的时候类似,我们需要转换成oracle数据库的字符集。
(2)使用UTL_RAW.cast