Flask 框架中 SQLAlchemy 使用時的亂碼問題

發表於2015-11-13

一、問題

這兩天在學習使用flask + SQLAlchemy 定製一個web查詢頁面的demo ,在測試時,發現查詢到的結果顯示亂碼 。這裡將解決方法記錄下。

二、解決思路

1、flask 程式上定位

flask的文件中提到可以通過設定 SQLALCHEMY_NATIVE_UNICODE 來禁止使用 SQLAlchemy 預設的 Unicode 編碼。有可能是SQLAlchemy預設的Unicode編碼不是UTF-8,抱著這樣的想法,在程式中指定了“SQLALCHEMY_NATIVE_UNICODE=False”,執行程式,報錯。

flask中還提到“use_native_unicode”為目標編碼來指定編碼方式,嘗試將“db = SQLAlchemy(app)”改為“db = SQLAlchemy(app, use_native_unicode=”utf8″)”。這回雖然沒報錯,但還是亂碼。

2、mysql 上定位

突然想到有可能是建表的時候,沒有指定字符集,使用的是資料庫預設的字符集的導致的。繼續找了一段時間的如何指定建表時使用字符集的方法,未果。

資料庫該不會使用的不是UTF-8吧?抱著這個想法,進入資料庫,輸入“status”,在輸出的資訊上顯示預設是latin-1。搞了半天,原來問題在這。

3、解決問題

即然找到了,問題就在mysql 的my.cnf 上增加相關配置,並重啟mysql 服務:

注:需要注意的是,之前已經存在的資料,在上面修改過後,通過mysql select查詢時會是亂碼,需要重新匯入。

PS:Python下SQLAlchemy真的是super好用,不太瞭解的童鞋可以嘗試一下下面這個MySQL的例子:

相關文章