Python通过cx_Oracle连接Oracle数据库解决中文乱码问题

Oliver
Oliver
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析Python使用cx_Oracle模块连接Oracle数据库时出现中文乱码的原因及解决方法。核心在于正确设置客户端环境变量NLS_LANG,使其与数据库字符集一致,并在Python源文件中指定正确的编码格式。通过调整SIMPLIFIED CHINESE_CHINA.UTF8等配置,可有效解决SELECT、INSERT及UPDATE操作中的中文显示与存储问题。

在使用Python连接Oracle数据库时,若频繁出现中文乱码现象,最可能的原因是Oracle客户端的字符编码配置存在偏差。

在实际操作中,笔者曾遇到数据插入时提示关键字"From"不存在的错误,但在PL/SQL中直接执行打印出的SQL语句却无异常。经过排查,最终确定问题根源在于字符集编码配置,并据此解决了该问题。

为确保Python脚本能正确处理中文,需在代码中显式配置环境变量。

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

通过上述配置,可以确保从数据库SELECT查询出的中文字符能够正常显示。

若需实现中文数据的正常INSERT和UPDATE操作,除了查询显示外,还必须确保Python源文件的字符编码与Oracle数据库的字符集保持一致。

# -*- coding: utf-8 -*-

具体配置示例如下所示。

# -*- coding: utf-8 -*- 
import os 
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8' 
import cx_Oracle 
db = cx_Oracle.connect(username/passwd@host:port/sevicename) 
cursor = db.cursor() 
#其他操作 
 
db.commit() 
db.close() 

客户端NLS_LANG设置及编码转换机制

当Oracle客户端向服务器提交SQL语句时,客户端会根据NLS_LANG环境变量与数据库字符集的对比结果,对应用程序传送的字符串编码进行转换处理。若NLS_LANG与数据库字符集一致,则不进行转换直接传送;若不一致,则需将字符串转换为数据库字符集后再传送至服务器。服务器接收字符串后,对于普通的CHAR或VARCHAR2类型数据直接存储;而对于NCHAR或NVARCHAR2类型数据,服务器会将其转换为国家字符集后再进行存储。

以上即为解决Python通过cx_Oracle模块连接Oracle数据库时出现乱码问题的完整方案,希望能为读者提供参考与帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表