今天在看Python連接數據庫的內容,然后遇到了最常遇到的字符亂碼的狀況,這真的很煩人,由於我用的是3.6的版本,,默認的是utf-8,如果是3以下的版本,請在文件開頭加一句代碼
#encoding=utf-8
這是菜鳥教程上的代碼
import pymysql
# 打開數據庫連接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印結果
print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income ))
except:
print ("Error: unable to fetch data")
# 關閉數據庫連接
db.close()
我比着敲出來的時候,出來的是亂碼,如下所示

這個黑人問號是什么鬼,然后從頭開始找起,記得在配置數據庫建表的時候一定要改成utf-8,不然一切都是徒勞的

很明顯,源頭是沒問題的,那就是代碼的問題了。
從網上找了許多方法,有一個是.decode('utf-8')方法,,我試過,但是會莫名的報錯我也沒找到具體原因,然后又想了一下之前在寫PHP時候連接數據庫的操作的時候順便做的不經意的轉碼行為,,然后隨即將代碼改正
import pymysql
# 打開數據庫連接
db = pymysql.connect(host='localhost', user='root', passwd='0825', db='testdb', charset='utf8')
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 查詢語句
sql = "select * from employee"
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
sex = row[2]
income = row[3]
# 打印結果
print("fname=%s, lname=%s, sex=%s ,income=%d" % (fname, lname, sex, income))
# 關閉數據庫連接
db.close()
嗯哼,,完美運行

