gpt4 book ai didi

mysql - Django 设置存储引擎和默认字符集

转载 作者:可可西里 更新时间:2023-11-01 06:31:39 25 4
gpt4 key购买 nike

从我的 models.py 创建我的表。我不知道如何做两件事 -

  1. 我想指定 MySQL 将我的一些表创建为 InnoDB,将一些表创建为 MyISAM。我该怎么做?
  2. 我还想将我的表 DEFAULT CHARSET 指定为 utf8。我该怎么做?

这是我在运行 syncdb 时看到的 -

...
) ENGINE=MyISAM DEFAULT CHARSET=latin1

我使用 Ubuntu 10.04、Django 1.2.X、MySQL 5.1.X

更新:我认为这些可能是 MySQL 的默认设置,我最终更改了 my.cnf,我在其中添加了 default-character-set = utf8。但是没有用。

最佳答案

我认为您不能逐个表更改存储引擎,但可以逐个数据库更改存储引擎。这当然意味着 InnoDB 外键约束,例如,不能应用于 MyISAM 表的外键。

因此您需要声明两个“数据库”,它们很可能在同一台服务器上:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#...
}
'innodb': {
'ENGINE': 'django.db.backends.mysql',
#...
'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' }
}
}

你只需要将 using('innodb') 应用于 InnoDB land 中表的查询集。

关于 UTF-8,我认为您需要在数据库级别执行此操作。我认为 syncdb 不会为您创建数据库,而只是创建表。无论如何,您应该手动创建数据库,这样您就可以在运行 syncdb 之前设置权限。你想要的数据库创建命令是:

CREATE DATABASE django CHARACTER SET utf8;

也就是说,我通常建议人们在数据库中创建两个 django 用户:一个用于数据库模式工作(“admin”),另一个用于其他所有操作(使用不同的密码):

CREATE DATABASE django CHARACTER SET utf8;
CREATE USER 'django_site'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_site;
CREATE USER 'django_admin'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_admin;
GRANT CREATE, DROP, ALTER, INDEX, LOCK TABLES ON django.* TO django_admin;
FLUSH PRIVILEGES;

(请注意,这需要为每个数据库完成。)

为此,您需要修改 manage.py:

import sys
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"]:
os.environ['DJANGO_ACCESS'] = "ADMIN"

然后在您的 settings.py 中,使用环境变量选择正确的设置。确保站点(即非管理员)用户是默认用户。

(此外,我没有在 settings.py 中存储数据库设置、SECRET_KEY 或任何其他敏感内容,因为我的 Django 项目存储在 Mercurial 中;我有settings.py 从一个只能由 Django 的用户和服务器管理员访问的外部文件中提取所有内容。我将把“如何”作为练习留给读者......因为我详细介绍了一些它是对其他人问题的回答,我现在懒得查了。)

关于mysql - Django 设置存储引擎和默认字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com