QtSql编程RedHat linux系统下oracle数据库中文乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QtSql编程RedHat linux系统下oracle数据库中文乱码相关的知识,希望对你有一定的参考价值。

使用QtSql访问oracle数据库,记录中有中文的地方全都是乱码,但是使用 SqlPlus查看能正常显示中文,数据库就安装在本机上,数据库使用的编码是American_Americaca_US7ASCII

我在main.cpp中设置了
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
GB2312也试过了

求高手来解决

    首先确认你的NLS_LANG环境变量是AMERICAN_AMERICA.US7ASCII,拼写无误

    统一编码设置:

    统一GBK编码(gbk或gb18030)
    QTextCodec *gbkTC = QTextCodec::codecForName("gbk");
        QTextCodec::setCodecForTr(gbkTC );
        QTextCodec::setCodecForLocale(gbkTC );
        QTextCodec::setCodecForCStrings(gbkTC );

    统一UTF8编码(utf-8或utf8)
    QTextCodec *utg8TC = QTextCodec::codecForName("utf-8");
        QTextCodec::setCodecForTr(utg8TC );
        QTextCodec::setCodecForLocale(utg8TC );
        QTextCodec::setCodecForCStrings(utg8TC );

    编码转换/前提也是要设置默认编码,然后针对来源字符串的编码进行转换,例如:

    QTextCodec *gbkTC = QTextCodec::codecForName("gb18030"); 
    QTextCodec *utg8TC = QTextCodec::codecForName("utf-8");

    QTextCodec::setCodecForTr(gbkTC);
    QTextCodec::setCodecForLocale(gbkTC);
    QTextCodec::setCodecForCStrings(gbkTC);

    1. UTF-8 转换 GBK
    QString UTF2GBK(QString utfStr)

      return gbkTC->toUnicode(utfStr.toLocal8Bit());


    2 GBK 转换 UTF-8
    QString GBK2UTF(QString gbkStr)

      return utg8TC->toUnicode(gbkStr.toUtf8());

追问

不大懂, 环境变量我用echo $NLS_LANG看过了,也是这个
现在
QSqlQueryModel *sqlModel;
sqlModel->setQuery("SELECT * FROM TABLE_INFO");
QString name_chn = record.value("TABLE_NAME_CHN").toString();
我该拿这个name_chn怎么处理呢?

追答

尝试这样转码看看:
QString name_chn = QString::fromLocal8Bit( record.value("TABLE_NAME_CHN").toString() );

尝试这样转码:

QString name_chn = QString::fromLocal8Bit( record.value("TABLE_NAME_CHN").toString() );

--

追问

还是不行

参考技术A 统一使用utf-8编码就可以了,其他编码不建议考虑,统一utf-8能够做到各个平台的最大的兼容性。 参考技术B 程序显示数据库里面的文字, 程序编码要和数据库的编码对应,

我做QT + sqlite3,sqlite3编码是GB2312, main.cpp里必须是GB2312,否则就显示乱码.
对应的American_Americaca_US7ASCII编码, 你设置UTF-8试试看.

Redhat5_linux 系统环境下 oracl11g的安装教程图解

linux_oracl11g 安装步骤

操作系统的安装敬请参考此文:VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解

设置linux服务器的静态地址请参考该文《oracl11g的安装教程图解

yum仓库搭建:

  Vmware Workstation虚拟机   请参考《Vmware Workstation _linux yum 仓库搭建

Oracle Vm Workstation虚拟机  请查看《Oracle Vm VirtualBox 搭建 yum 环境




一:操作步骤目录:

1、搭建yum,安装包(root用户下完成)

2、检查参数/etc/sysctl.conf  /etc/security/limits.conf(root用户下完成)

3、创建用户组和用户(root用户下完成)

4、创建目录,并改权限(root用户下完成)

5、设置IP 地址和主机名的映射/etc/hosts(root用户下完成)

6、设置oracle用户的环境变量/home/oracle/.bash_profile(oracle用户下完成)

7、复制oracle软件包和安装(oracle用户下完成)

  unzip 软件包名称

8、在root用户执行二个脚本

[oracle@wl database]$ sqlplus / as sysdba

9、使用DBCA工具创建和配置数据库

二:具体操作步骤

操作步骤:一:检测yum仓库是否已经配置好了

1:搭建yum,安装包(root 用户下完成)

  1 [root@oracle ~]# yum list all

       如果输入这条指令可以正确显示出rpm 包的列表,则说明yum 仓库已经配置完成,反之如下图则表示yum仓库没有安装好,需要进行下列后序步骤;

img1

操作步骤二:搭建yuml 仓库

1) 挂载所需要的安装光盘

虚拟机挂载光盘:

设置→ 光盘→ 路径(在“连接”处打勾)

  1 #将光盘挂载到/mnt 目录下
  2 [root@oracle ~]# mount /dev/cdrom -o loop /mnt   

2) 切换至yum.repo.d 目录下

  1 [root@oracle ~]# cd /etc/yum.repos.d/

3) 创建任意文件名,后缀为.repo 的文件

  1 [root@oracle ~]# vi server.repo

4) 编辑该文件如下

  1 [root@oracle ~]# vi server.repo
  2 
  3 [server]
  4 #名称可以任取
  5 name=Red Hat Enterprise Linux
  6 
  7 #//若为本机,file:///mnt/Server
  8 baseurl=ftp://192.168.0.254/pub/rhel6/dvd/
  9 #//启用yum 仓库,默认为启用
 10 enabled=1
 11 #//验证设置为否
 12 gpgcheck=0
 13 

操作步骤三: 安装所需要的包

1) 编辑脚本以安装所需要的包

  1 [root@oracle ~]# vi yum.sh
  2 
  3 yum install binutils* -y
  4 
  5 yum install compat* -y
  6 
  7 yum install elfutils* -y
  8 
  9 yum install gcc* -y
 10 
 11 yum install glibc* -y
 12 
 13 yum install kernel* -y
 14 
 15 yum install ksh* -y
 16 
 17 yum install libaio* -y
 18 
 19 yum install libgcc* -y
 20 
 21 yum install libgomp* -y
 22 
 23 yum install libstdc* -y
 24 
 25 yum install make* -y
 26 
 27 yum install sysstat* -y
 28 

2) 修改权限以执行脚本

  1 [root@oracle ~]# chmod 755 yum.sh

3) 执行脚本以安装必须的包

  1 [root@oracle ~]# ./yum.sh

操作步骤四:修改相关的系统配置

1:修改etc/sysctl.conf

1) 在/etc/sysctl.conf 文件尾部追加以下内容

  1 [root@oracle ~]# vi /etc/sysctl.conf
  2 
  3 fs.aio-max-nr = 1048576
  4 
  5 fs.file-max = 6815744
  6 
  7 kernel.shmall = 2097152
  8 
  9 kernel.shmmax = 4294967295
 10 
 11 kernel.shmmni = 4096
 12 
 13 kernel.sem = 250 32000 100 128
 14 
 15 net.ipv4.ip_local_port_range = 9000 65500
 16 
 17 net.core.rmem_default = 262144
 18 
 19 net.core.rmem_max = 4194304
 20 
 21 net.core.wmem_default = 262144
 22 
 23 net.core.wmem_max = 1048576
 24 

    2) 保存并退出,使修改生效

  1 [root@oracle ~]# /sbin/sysctl -p

2. 修改/etc/security/limits.conf

//在/etc/secuirty/limits.conf 文件尾部追加以下内容,以设置用户限制

  1 [root@oracle ~]# vi /etc/security/limits.conf
  2 
  3 oracle soft nproc 2047
  4 
  5 oracle hard nproc 16384
  6 
  7 oracle soft nofile 1024
  8 
  9 oracle hard nofile 65536
 10 
 11 oracle soft stack 10240
 12 

3. 修改/etc/pam.d/login

//在/etc/pam.d/login 文件尾部追加以下内容,以修改登录配置

  1 [root@oracle ~]# vi /etc/pam.d/login

session required pam_limits.so

4. 关闭SELINUX 功能

  1 [root@oracle ~]# vi /etc/selinux/config
  1 SELINUX=disabled //这里设置为disabled 即关闭SELINX

5. 修改/etc/hosts 文件

需要保证三处的主机名一致:

● /etc/hosts 中的长主机名

● 使用hostname 指令显示的主机名

● /etc/sysconfig/network 中的主机名//修改主机名后需要重启机器

使用IFCONFIG 指令查看本机IP

  1 [root@oracle ~]# ifconfig

//确保此处IP 和/etc/hosts 文件中的IP 地址

----------------------------------------------------------------

1):查看本机hosts文件信息

  1   [root@localhost ~]# hostname

2):修改hosts文件信息

  1 [root@oracle ~]# vi /etc/hosts
  1 127.0.0.1 localhost.localdomain localhost
  2 
  3 #本机IP 地址//长主机名//短主机名
  4 
  5 192.168.21.4 oracle.example.com oracle
  6 

操作步骤五:创建用户和用户组、创建安装目录

1. 创建dba、oinstall 用户组

  1 #以root 用户登录
  2 #添加dba 用户组(ORACLE 管理组)
  3 [root@oracle ~]# groupadd dba 
  4  #添加oinstall 用户组(ORACLE 安装组)
  5 [root@oracle ~]# groupadd oinstall
  6 #创建oracle 用户并加入组
  7 [root@oracle ~]# useradd -g oinstall -G dba oracle 
  8 #修改oracle 用户的密码
  9 [root@oracle ~]# passwd oracle 
 10 

2. 创建安装目录

  1  #切换到根目录
  2 [root@oracle ~]# cd /
  3 #创建安装目录
  4 [root@oracle /]# mkdir -p /u01/app/oracle 
  5  #修改安装目录的权限
  6 [root@oracle /]# chown oracle:oinstall /u01/app/oracle/
  7 

操作步骤六:修改环境变量

1) 将以下几行追加在oracle 用户的环境变量中

  1 [oracle@oracle ~]$ vi .bash_profile
  2 #//数据库实例名
  3 export ORACLE_SID=orcl
  4 #//ORACLE 安装目录
  5 export ORACLE_BASE=/u01/app/oracle
  6 #//ORACLE 家目录
  7 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
  8 #//搜索路径
  9 export PATH=$PATH:$ORACLE_HOME/bin
 10 
 11 #//以下内容可不写
 12 #//指定安装Oracle 终端的类型
 13 export ORACLE_TERM=xterm
 14 
 15 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
 16 
 17 #设置临时的库文件的path 路径
 18 
 19 export CLASSPATH=$ORACLE_HOME/JRE:ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
 20 
 21 #设置java lib 文件搜索路径
 22 

2) 保存,并使参数生效

  1 [oracle@oracle ~]$ source .bash_profile

--------------------------------------------------------------------------------------------------------------------------------------

操作七:上传并解压oracle11g安装包

1:上传:

1):用鼠标在ssh2的连接页签上面右键选择“连接SFTP标签”

img2

2):在sftp页签中:用put filepath 的方式上传文件

img3

2:文件解压

1):用root用户登录进行:移动文件到oracle用户的/home/oracle目录下,并设置权限

   注:安装包下载地址;可以去oracle官网下载;也可以使用我提供的oracle 11g R2 的安装包: 链接: https://pan.baidu.com/s/1aN8FEIHZ0nV2O0N5YW1OaQ 密码: q3jq

img4

2):切换到oracle 用户:进行解压oracle 11g 安装包

img5

img6

同理:解压第三个压缩包

操作八:安装oracle 11g 数据库

1:安装Xme30.exe 软件

软件下载路劲:链接:http://pan.baidu.com/s/1gf5cbKn 密码:m1pn

1):安装步骤一直下一步即可

img7

2):注册lic

img8

img9

3):启动工具

img10

2:oracle 11g 安装步骤图解

1):调用oracle 11g 安装图形界面(用oracle 用户登录)

img11

2):oracle 11g  数据库 图形安装

图1:

img12

图2:

img13

图三:

img14

图四:

img15

图5:

img16

图6:

img17

图7:

img18

设置 app 文件夹的权限信息

img19

img20

图8:

img21

图9:

用root 用户 创建 oper 组

img22

([root@oracle u01] 文件夹怎么进入的请参考上面图7 “设置app 文件夹权限信息”步骤)

img23

图10 开始检测

img24

检测成功

img25

如果检测失败,如何修改配置文件参数信息(如下图界面)

img26

点击上图红框的位置,进入下图

img27

img28

img29

重新检测成功后,点击“install”进行数据库的安装

img30

图11:开始安装(漫长的等待)

img31

图12:当进入下图界面,后要进行命令执行

img32

在 [root@oracle u01] 的root 用户下  当前目录为u01 下进行命令执行

img33

图13:点击“ok”按钮后,进入下图界面,点击‘close’按钮后关闭界面,数据库安装完毕

img34

3)oracle 11g  数据库实例 图形安装

图1:在[oracle@oracle database] 目录下 执行dbca 命令调用 数据库实例 图形安装界面

img35

img36

img37

图2 :next

img38

图3:下一步

img39

图4:

img40

查看环境变量中sid

img41

输入sid后点击next

img42

图5:进行listener设置

img43

解决方案:

①:在linux 虚拟机中打开命令窗口,执行如下图的命令

img44

②:然后执行下图命令,调出 listener 设置图形界面,然后一路下一步到结束

img45

③:listener 参数设置,一路设置默认一路下一步;

img46

切换到window系统中oracle 11g 实例安装图形界面中

img47

图6:oracle 11g 实例 登录用户账户/密码设置

img48

图7 :

img49

图8:默认下一步

img50

图9:

img51

图10:

img52

img53

图11:

img54

img55

img56

img57

注意:

如果在调整内存的大小时,过于太大时出现以下错误,解决方法如下

img58

img59

解决方法:修改 /de/shm 的大小

img60

这时,可以切换到其他选项了

img61

图12:

img62

img63

点击“ok”安装结束

img64

进行实例安装

img65

以上是关于QtSql编程RedHat linux系统下oracle数据库中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

怎么在Redhat linux下搭建C编程环境

使用 PySide2 QtSql QSqlDatabase 时缺少 MySql 驱动程序

ORA-00119,ORA-00130 错误处理

虚拟机中RedHat Linux系统安装

如何备份redhat linux系统?

VMware虚拟机下安装RedHat Linux 9.0