關於Python中文編碼字符串連接DB異常解決方案:
問題:之前用帶有中文的長字符串SQL連接OracleDB時總是提示From關鍵字不存在啊,SQL格式不正確之類的錯誤,但是SQL確實可以直接在DB檢索出結果的。
解決過程:一直以爲是字符串編碼定義不正確的問題,中間試過了各種Decode,Encode,還特意用編輯器改編碼格式爲Utf-8,python代碼前面也特意加上了# -*- coding:utf-8 -*-說明,還是一直報錯。
答疑說明:在Oracle客戶端向服務器端提交SQL語句時,Oracle客戶端根據NLS_LANG和數據庫字符集,對從應用程序接傳送過來的字符串編碼進行轉換處理。如果NLS_LANG與數據庫字符集相同,不作轉換,否則要轉換成數據庫字符集並傳送到服務器。服務器在接收到字符串編碼之後,對於普通的CHAR或VARCHAR2類型,直接存儲;對於NCHAR或NVARCHAR2類型,服務器端將其轉換爲國家字符集再存儲。
1、查詢oracle server端的字符集方法
select userenv(‘language’) from dual;
2、通過Python連接DB Oracle數據庫時,使用nencoding=‘utf-8’定義字符編碼,並且通過Import os後,實現下面代碼定義字符集編碼
connection = cx_Oracle.connect(switch_case(key), nencoding='utf8')
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8'