Oracle 数据插入引发 'ascii' 编解码器无法对位置 87 中的字符 '\xea' 进行编码:序号不在范围内 (128) 错误

Oracle data insertion raising 'ascii' codec can't encode character '\xea' in position 87: ordinal not in range(128) error

我正在尝试将 Portuguese 文本插入到我的 table 中。但是,它给出了 'ascii' codec can't encode character '\xea' 错误。

这是我正在做的事情:

   os.environ["NLS_LANG"] = ".AL32UTF8"

   query = "INSERT INTO MESSAGE (MESSAGE,LANGUAGE) VALUES (:MESSAGE,:LANGUAGE)"
   data = {'MESSAGE': '..... assistência para ajuda responda AJUDA Sua', 'LANGUAGE': 'Portuguese'}
   cursor = conn.cursor()
   cursor.execute(query, data)
   .....

我的table结构:

CREATE TABLE MESSAGE  (   
    language  VARCHAR2(12) NOT NULL, 
    message  NVARCHAR2(350) NOT NULL
);

我不确定是否需要设置任何内容以将其他字符插入数据库。

如果您要设置环境变量 NLS_LANG,您 必须 在创建任何连接之前进行设置;否则,它将无效。然而,更好的是使用以下内容创建连接,因为这不依赖于环境变量:

connection = cx_Oracle.connect("user/password@connectString",
        encoding="UTF-8", nencoding="UTF-8")