關於Python中文編碼字符串連接DB異常解決方案:

關於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;

https://img-blog.csdnimg.cn/20191010172337148.png

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'

https://img-blog.csdnimg.cn/20191010172600950.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqanp6ZzY2Ng==,size_16,color_FFFFFF,t_70

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章