1 # -*- coding: utf-8 -*- 2 import sqlite3 3 4 conn = sqlite3.connect('SWC_Perf_Info.db') 5 cur = conn.cursor() 6 7 test_sql1 = "INSERT INTO test (name) VALUES ('我愛中國')" #gbk編碼,存入數據庫的時候顯示的是亂碼 8 cur.execute(test_sql1) 9 conn.commit()
10 11 cursor = cur.execute("SELECT name from test") 12 for row in cursor: 13 print(row[0]) #因為讀取的是GBK編碼內容,所以可以直接顯示 14

15 16 test_sql2 = "INSERT INTO test (name) VALUES ('我愛中國')".decode('GBK') #unicode編碼 17 cur.execute(test_sql2) 18 conn.commit() 19

20 cursor = cur.execute("SELECT name from test") 21 for row in cursor: 22 print(row[0].decode('utf-8')) #即使用的是Unicode寫入的數據庫,內部還是使用的UTF-8編碼存入,所以需要使用UTF-8解碼 23 print(row[0].decode('utf-8').encode('GBK')) #輸出的時候可以使用Unicode輸出也可以使用本地的GBK輸出 24

25 test_sql3 = test_sql2.encode('utf-8') #utf-8編碼 26 cur.execute(test_sql3) 27 conn.commit() 28

29 cursor = cur.execute("SELECT name from test") 30 for row in cursor: 31 print(row[0].decode('utf-8')) 32 print(row[0].decode('utf-8').encode('GBK'))

1 select_sql1 = "SELECT name from test where name = '我愛中國'" #以GBK格式查詢 2 cursor = cur.execute(select_sql1) 3 for row in cursor: 4 print(row[0].decode('utf-8')) 5 print(row[0].decode('utf-8').encode('GBK'))
#查詢不到結果
6 7 select_sql2 = "SELECT name from test where name = '我愛中國'".decode('GBK') #以Unicode格式查詢 8 cursor = cur.execute(select_sql2) 9 for row in cursor: 10 print(row[0].decode('utf-8')) 11 print(row[0].decode('utf-8').encode('GBK'))
12 13 select_sql3 = "SELECT name from test where name = '我愛中國'".decode('GBK').encode('utf-8') #以utf-8格式查詢 14 cursor = cur.execute(select_sql3) 15 for row in cursor: 16 print(row[0].decode('utf-8')) 17 print(row[0].decode('utf-8').encode('GBK'))

總結下來寫入的時候可以使用Unicode或者UTF-8編碼的字符寫入數據庫
讀取輸出的時候使用UTF-8編碼或者GBK編碼的字符輸出
查詢的語句也必須是Unicode或者utf-8格式才能查詢到結果
UTF-8是可以支持直接的讀取或者輸出理想編碼格式