我已决定首次使用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