使用 python 脚本写入 Oracle DB 时出现字符集问题

问题描述 投票:0回答:2

我正在使用 Spotfire 中的 Python 脚本写入 Oracle 表。我正在从 Spotfire 中选取值并使用脚本的以下部分将其插入到数据库中。

from Spotfire.Dxp.Data.Import import DatabaseDataSource, DatabaseDataSourceSettings, DataTableDataSource
objID = Document.Properties["OBJID"]
objectname = Document.Properties["ObjName"]
sqlIns = sqlIns + "insert into mytablename (OBJ_ID,OBJ_NAME) VALUES ('" + objID + "','" + objectname + "')" 
print sqlIns
dbsettings = DatabaseDataSourceSettings( "System.Data.OracleClient","Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx.com)(PORT=1530))(CONNECT_DATA=(SID=xxx)));User Id=xxxx;Password=xxx",sqlIns)
ds = DatabaseDataSource(dbsettings)
newDataTable = Document.Data.Tables.Add("temp",ds)
Document.Data.Tables.Remove(newDataTable)  

当 OBJ_NAME 中的值是英文时,这工作正常,当我插入其他语言(例如韩语数据库)中的 OBJ_NAME 时,会显示诸如“¿¿¿¿¿¿ 但是当我打印上面的 python 代码时,我可以看到它显示了正确的韩语字符。请看下图。

enter image description here

但是在oracle中它没有正确显示。请参阅下面的 oracle 表的屏幕截图 enter image description here

由于oracle中OBJ_NAME的数据类型是Nvarchar,如果我从oracle本身插入这个韩语值,它将插入正确的韩语字符。

python oracle-database python-2.7 spotfire codepages
2个回答
0
投票

你可以尝试在Python脚本中编码为utf-8吗?


0
投票
  1. 在连接字符串中的Python代码中,从数据库加载数据时使用utf8mb4 例如,假设您正在从 mysql 加载数据:connection_string = f"mysql+pyodbc://@{dsn}?charset=utf8mb4"

  2. 从python写入oracle时,请将objectname的数据类型设置为nvarchar。

© www.soinside.com 2019 - 2024. All rights reserved.