最近在按照這本書學Flask,學到經過ORM方式操做數據庫時遇到一個很奇怪的問題:
會報下面這個1366的錯
...default.py:470: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 479")html
奇怪的地方在於我表格裏的數據所有都是英語python
由於看到UTF編碼,首先就想到是否是編碼的問題,因而mysql
檢查了本身的MySQL的配置程序員
沒發現配置有問題,都是UTF-8編碼
網上搜了下相關資料sql
發現除了MySQL中的編碼配置以外,Python的編碼也要是UTF-8,檢查沒發現問題 (以下圖) 另外就是在字符串前加上u,變成u'string'的形式,固然這招也沒用
到此我比較鬱悶,遂求助於程序員好友,他看/聽完描述,立刻就找到了最可疑之處 - MySQL驅動
的確,書中在建立數據庫鏈接時,並沒提到相關概念,但我以前再根據廖雪峯網站學MySQL操做時,是有這個步驟的
而後根據這個思路進行操做數據庫
安裝MySQL驅動(我升級過Python,因此要再裝一遍)app
本想安裝MySQL官方驅動mysql-connector-python的,然而官方目前只支持到3.4 我又懶,因此就用了另外一個驅動mysql-connector,也不知道是誰開發的……
修改代碼,把網站
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/database'
改爲編碼
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:password@localhost/database'
至此,上述1366報錯信息消失!spa
我推測是由於SQLAlchemy使用了默認的數據庫驅動(按官方文檔,是mysql-python)有問題,才致使此問題還望看到此文章的大神能驗證一下個人說法