我已決定首次使用Django 1.7與Python 3. 我需要能夠使用包含utf8
數據的舊版latin1
數據庫。我知道這很糟糕,但是數據庫非常龐大,所以改變這一點是不可能的。所以我嘗試以下操作:無法將character_set_results設置爲latin1
DATABASES = {
'ENGINE' : 'django.db.backends.mysql', // using MySQL-python fork with support for py3
...
'OPTIONS' : {
'init_command': "SET character_set_results = 'latin1'",
#'read_default_file': '/etc/my.cnf.d/client.cnf', // I've also tried this one
}
}
我也試着從甲骨文中的python-mysql的連接器具有以下設置
DATABASES = {
'ENGINE' : 'mysql.connector.django', // using MySQL-python fork with support for py3
'OPTIONS' : {
'option_files': ['/etc/my.cnf.d/client.cnf'],
}
}
/etc/my.cnf.d/client.cnf
[client]
init-command='SET character_set_results = "latin1"'
# password, host, username
在這兩種情況下,我都可以連接到數據庫,但好像Django會將character_set_results設置回utf8。
我已經試過以下
from django.db import connection
with connection.cursor() as c:
// I expect variable to be 'latin1'
c.execute("show variables like 'character_set_results%'")
c.fetchone() // returns ('character_set_results', 'utf8')
// here I try to set it manually
c.execute("SET character_set_results = 'latin1'")
c.execute("show variables like 'character_set_results%'")
c.fetchone() // returns ('character_set_results', 'latin1') // now it's OK
- 我敢肯定,Django使用
client.cfg
文件和正確[section]
,因爲它包含的用戶名/密碼,併成功連接到數據庫 - 當我使用
mysql
命令在使用相同配置文件的linux終端中,一切按預期工作
所以我想Django強制執行character_set_results
變量是utf8
。可能嗎?有什麼辦法可以解決這個問題嗎?
非常感謝您
如果mysql連接器python拋出運行時錯誤,請報告bugs.mysql.com上的錯誤。 – Peeyush 2014-09-05 18:06:48
我還需要調用'conn.connection.set_character_set(「latin1」)'以確保mysql連接中的string_decoder使用正確的字符集進行字符串到Unicode的轉換......(mysql-python = 1.2.3, django = 1.4,mysql = 5.6) – 2015-02-11 14:04:04
如何設置全局所有遊標默認情況下都必須是latin-1?因爲我的數據庫所有字符字段是latin1?謝謝 – giaosudau 2015-04-15 14:46:20