You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python从TeradataDB查询数据到DataFrame时的编码问题

解决Teradata LATIN字符集数据查询乱码问题

问题核心

你的Teradata表使用CHARACTER SET LATIN存储波兰语数据,teradatasqlalchemy返回的\x8cWIDNICA是编码不匹配导致的——Teradata针对中欧语言的LATIN字符集对应**cp1250(Windows-1250)**编码,而非你尝试的cp1252、latin1或utf8。

可行解决方案

方案1:连接时指定正确字符集

直接在数据库连接URL中添加charset=cp1250参数,让驱动自动用正确编码解析数据:

import sqlalchemy as sqlal
import pandas as pd

# 修改连接字符串,加入charset参数
engine = sqlal.create_engine('teradatasql://ip_to_my_db/?user=user&password=pass!&tmode=TERA&charset=cp1250', pool_size=5)
conn = engine.connect()

try:
    query = """select addresses from WH_table"""
    data = pd.read_sql(query, con=conn)
    print(data)  # 此时应输出正确的ŚWIDNICA
except Exception as e:
    print(e)
finally:
    conn.close()

方案2:批量转码已返回的数据

如果无法修改连接参数,可对DataFrame中的目标列批量处理,先将字符按latin1转成字节(保留原始字节值),再用cp1250解码:

# 在获取data之后执行转码
data['addresses'] = data['addresses'].apply(lambda x: x.encode('latin1').decode('cp1250'))
print(data)

原因说明

Teradata的CHARACTER SET LATIN并非统一对应latin1编码:

  • 针对西欧语言(如英语、法语)用cp1252
  • 针对中欧语言(如波兰语、捷克语)用cp1250
    Teradata Studio会根据数据库的区域配置自动适配编码,而teradatasqlalchemy默认编码不匹配,才导致Ś被解析成\x8c。

内容的提问来源于stack exchange,提问作者neek98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:26:04