cx_oracle连接oracle的us7ascii数据集乱码问题

1.问题

oracle数据库使用到的字符集是us7ascii,总的来说就是ascii数据集,7位表示一个字符,对于英文还没有问题,但是遇到中文就G了。
查看自己数据库使用的字符集:

SELECT value
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';

2.网上出的解决方法(弯路)

第一种方法

import os 

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

这是在cx_oracle5或者之前的版本可以支持,现在都升到9了,甚至官网都不建议使用cx_oracle了,建议使用他们最新的驱动,不需要本地下载客户端。

第二种方法

# 替换以下信息为你的实际数据库连接信息
dsn_tns = cx_Oracle.makedsn('****', '***', service_name='***')

# 字符集和字符编码
encoding = 'UTF8'
self.connection = cx_Oracle.connect(user='123', password='123', dsn=dsn_tns, encoding=encoding)

这种方法对于数据库字符集本来就是utf8或者gbk的数据好使,但是对于数据库字符集是us7ascii的真的没用。

3.真正的解决方法

cursor.execute("SELECT DAY,utl_raw.cast_to_raw(OPERATORS) from table")
for raw in cursor:
	# gbk,utf-8等等都尝试下
	print(str(raw[1], encoding='gbk'))

最后就能显示中文,如果使用pandas的,也可以使用pandas的decode方法来重新编码。
它的原理其实就是将数据库的中文数据不适用us7ascii编码,而是直接传输二进制流传输到客户端,客户端通过gbk编码就可以了。
对于很多老旧的项目的数据库,没怎么维护,也没怎么用,索性数据库字符集就是默认的us7ascii,坑人。
希望帮助到你了,能帮忙点个赞,顶上去,让更多人少走弯路。

相关推荐

  1. cx_oracle连接oracleus7ascii数据问题

    2024-02-01 10:14:02       53 阅读
  2. Oracle imp导入数据后中文

    2024-02-01 10:14:02       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 10:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 10:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 10:14:02       82 阅读
  4. Python语言-面向对象

    2024-02-01 10:14:02       91 阅读

热门阅读

  1. datax oracle->pg库 迁移表

    2024-02-01 10:14:02       60 阅读
  2. npm install -g pnpm 安装出现错误

    2024-02-01 10:14:02       53 阅读
  3. npm发布Vue组件

    2024-02-01 10:14:02       44 阅读
  4. Kubernetes实战(二十)-集群节点磁盘清理

    2024-02-01 10:14:02       51 阅读
  5. STM32—系统定时器

    2024-02-01 10:14:02       57 阅读
  6. Python实现设计模式-策略模式

    2024-02-01 10:14:02       50 阅读
  7. pat乙类1002

    2024-02-01 10:14:02       49 阅读
  8. 一起学习飞桨 深度强化学习算法DQN

    2024-02-01 10:14:02       49 阅读
  9. C++结合OpenCV实现视频播放器

    2024-02-01 10:14:02       45 阅读
  10. python查询xml类别

    2024-02-01 10:14:02       48 阅读