我想将Django网站设置为以万无一失的方式使用UTF-8 for MySQL,无论MySQL安装是否使用UTF-8作为默认设置。除了使用UTF-8编码创建表之外,我还在settings.py中的数据库初始化中添加了以下内容,以确保连接也使用utf-8:
'OPTIONS': { 'init_command': 'SET storage_engine=INNODB; SET names "utf8"' }
这会导致错误:
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
这样做的正确方法是什么?还有另一个需要执行SET NAMES的地方吗?
答案 0 :(得分:15)
您只需要使用一次SET,并将其他命令附加为:
'SET storage_engine=INNODB,character_set_connection=utf8,collation_connection=utf8_unicode_ci'
答案 1 :(得分:10)
我所要做的就是把它放在settings.py
:
'OPTIONS': { 'init_command': 'SET storage_engine=INNODB' }
然后我在MySQL中自己创建了数据库:
CREATE DATABASE my_database CHARACTER SET utf8;
随后是所有CREATE USER
和GRANT
来电。
之后,./manage.py syncdb
和./manage.py migrate
(因为我使用南方)完成了一切。
到目前为止一直很好。也没有必要更改任何MySQL配置文件。 (系统管理员希望默认情况下为其他用户使用latin1
字符集保留MySQL。)
答案 2 :(得分:3)
检查:http://blog.ionelmc.ro/2014/12/28/terrible-choices-mysql/
'SET '
'storage_engine=INNODB,'
'character_set_connection=utf8,'
'collation_connection=utf8_bin,'
'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
}