我正在使用 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 代码时,我可以看到它显示了正确的韩语字符。请看下图。
但是在oracle中它没有正确显示。请参阅下面的 oracle 表的屏幕截图
由于oracle中OBJ_NAME的数据类型是Nvarchar,如果我从oracle本身插入这个韩语值,它将插入正确的韩语字符。
你可以尝试在Python脚本中编码为utf-8吗?
在连接字符串中的Python代码中,从数据库加载数据时使用utf8mb4 例如,假设您正在从 mysql 加载数据:connection_string = f"mysql+pyodbc://@{dsn}?charset=utf8mb4"
从python写入oracle时,请将objectname的数据类型设置为nvarchar。