最近在做SQL的final design,使用python查詢并顯示資料庫中存盤的中文時出現了亂碼,查閱了一些資料后最終解決了問題,
創建表:
cursor.execute(
'USE TESTZ CREATE TABLE Employees ( EmployeeID char(6) NOT NULL PRIMARY KEY, Name char(10) NOT NULL, Sex bit NOT NULL DEFAULT 1, '
'WorkYear tinyint NULL, Salary float NOT NULL, DepartmentID char(3) NOT NULL, Position char(8) NOT NULL, Rank char(8) NOT NULL)')
其中Name,Position,Rank存盤值為中文:
cursor.execute(
'USE TESTZ INSERT INTO Employees VALUES(\'000001\',\'張三\',1,8,2000,\'001\',\'職員\',\'中級員工\')')
使用SELECT陳述句查詢,出現亂碼:
[('000001', '??èy ', True, 8, 2000.0, '001', '?°?± ', '?D???±1¤')]
嘗試解決
首先嘗試了這篇文章的方法,在連接資料庫時將字符編碼格式設定為“GBK”,發現并未成功,因為程式向SQL Server發送指令使用的字符集仍為默認的utf-8,所以指令無法成功解讀導致報錯,
之后嘗試了這個方法(很水),先encode再decode,嘗試把指令轉換為GBK格式,再與SQL Server進行通訊,結果仍是失敗,
最后參考了這篇文章,在創建表時把char型資料改為nvarchar(即使用unicode存盤):
cursor.execute(
'USE TESTZ CREATE TABLE Employees ( EmployeeID char(6) NOT NULL PRIMARY KEY, Name nvarchar(10) NOT NULL, Sex bit NOT NULL DEFAULT 1, '
'WorkYear tinyint NULL, Salary float NOT NULL, DepartmentID char(3) NOT NULL, Position nvarchar(8) NOT NULL, Rank nvarchar(8) NOT NULL)')
之后進行查詢,中文亂碼問題成功解決:
[('000001', '張三', True, 8, 2000.0, '001', '職員', '中級員工')]
SQL菜雞,如有錯誤歡迎指正批評!XD
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/241499.html
標籤:其他
