我有一个Postgres安装,设置为使用LATIN1作为默认编码。但是,我的生产数据库要求我使用UTF8(它是在Heroku上托管的,所以我没有任何选择)。
我已经创建了我的本地开发数据库以正确设置:
sudo createdb -Upostgres $PROJECT_NAME --template=template0 \
--encoding=UTF8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8
然而,我现在无法运行django测试,因为测试数据库只使用默认的Postgres集群设置(LATIN1),这导致测试失败(我在某些模板中有无效的字符 - {{1 }})
'核'选项是使用正确的(en_US.UTF8)设置重新安装Postgres,但是因为我在VM中运行它,每次我启动VM时我真的不想这样做。如果有一种方法可以按摩Django来首先正确地创建数据库。
[更新1:TEST_ENCODING]
跟进@ sneawo的建议,我已经设置了数据库的TEST_ENCODING属性,现在得到以下错误:
...character 0xe28099 of encoding "UTF8" has no equivalent in "LATIN1"
[更新2:核选项]
我之前提到了这一点,并不适合所有人,但是因为我在VM上运行它,所以我很容易在我的Vagrant配置脚本(shell脚本)中使用正确的排序重新创建postgres集群:< / p>
Creating test database for alias 'default'...
Got an error creating the test database: encoding UTF8 does not match locale en_US
DETAIL: The chosen LC_CTYPE setting requires encoding LATIN1.
我有从主机复制的sudo service postgresql stop
sudo pg_dropcluster 9.1 --stop main
sudo pg_createcluster --start -e UTF-8 9.1 main
sudo cp -f $CONF_DIR/pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf
sudo cp -f $CONF_DIR/postgresql.conf /etc/postgresql/9.1/main/postgresql.conf
sudo service postgresql restart
和pg_hba.conf
的默认“允许所有”版本,以覆盖创建群集时创建的默认值。这是一个大锤到裂缝的解决方案,但它确实有效,而且很快。
答案 0 :(得分:0)
在底部settings.py
添加此代码try:
from local_settings import *
except ImportError:
pass
在local_settings.py
中添加此代码DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_db',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
'OPTIONS': {
'charset': 'latin1',
'use_unicode': True, },
},
}
将local_settings.py添加到git ignore。