公司mysql統一用latin1的編碼,真是叫人苦不堪言。django用預設utf8訪問mysql資料庫。在運算元據庫時,不管你怎麼轉碼,最終寫到資料庫裡的中文都是亂碼。在網上找了很久,也沒解決這個問題。
後來看了乙個django的mysql操作的原始碼,發現了一些問題 先是/django/db/backends/mysql/base.py 檔案的 257 到263行
關鍵在這兩行2def _cursor(self):
261 'charset': 'utf8',
262 'use_unicode': true,
這說明,運算元據庫用的是通用編碼utf8 而且是硬編碼進去的。如果我也硬編碼改這裡的話,以後有utf8的庫的話,就糟糕了。所以要想辦法將這兩項寫到配置檔案裡。所以選注釋掉這兩行。在settings_dict = self.settings_dict 這行下面新增如下的**
修改settings.py 加入如下兩行
但這樣改了之後,會找不到database_charset和use_unicode 這說明在配置轉進來之前做了篩選,再繼續看這個檔案/django/db/__init__.py 會看到這樣的**
'database_host': settings.database_host,
'database_name': settings.database_name,
'database_options': settings.database_options,
'database_password': settings.database_password,
'database_port': settings.database_port,
'database_user': settings.database_user,
'time_zone': settings.time_zone,})
看得出來,這行是在初始化資料庫物件,把settings.py裡的一些設定傳了進去。那麼,我們在這裡把剛剛新增的兩個設定放進來就行了
'database_charset':settings.database_charset,
'use_unicode':settings.use_unicode,
儲存,重啟下apache 。再執行原來的程式,成功向資料庫中寫入資料,中文不再是編碼。
但是,這個也不能說是完全解決,在運算元據庫時,會報一些異常 unicodedecodeerror、unicodeencodeerror和djangounicodedecodeerror 把它們抓住後忽略掉就行了
Django使用mysql資料庫
專案檔案下的settings.py 搜尋databases 按如下模式配置 databases 專案目錄下的 init py import pymysql pymysql.install as mysqldb 這個的原因大概是因為版本更新的問題,現在的版本需要使用pymysql這個模組,但是原本的 ...
Django使用mysql資料庫
專案檔案下的settings.py 搜尋databases 按如下模式配置 databases 專案目錄下的 init py import pymysql pymysql.install as mysqldb 這個的原因大概是因為版本更新的問題,現在的版本需要使用pymysql這個模組,但是原本的 ...
Django使用mysql資料庫
布置生產環境的時候要換成mysql,根據django官網的文件也設定好了setting.databases.但是執行python3 manage.py makemigrations的時候又遇到錯誤了,檢視日誌大概的問題就是 importerror no module named mysqldb 已經...