Python “炼金术”指定的密钥太长
我有以下炼金术模式:Python “炼金术”指定的密钥太长,python,mysql,sql,sqlalchemy,flask-sqlalchemy,Python,Mysql,Sql,Sqlalchemy,Flask Sqlalchemy,我有以下炼金术模式: class User(db.Model, UserMixin): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), nullable=False, unique=True) password = db.Column(db.String(255), nullable=False, s
class User(db.Model, UserMixin):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False, server_default="")
email = db.Column(db.String(254), nullable=False, unique=True)
confirmed_at = db.Column(db.DateTime())
is_enabled = db.Column(db.Boolean(), nullable=False, default=False)
def is_active(self):
return self.is_enabled
它生成SQL(我使用的是MySQL):
但是,这会导致错误“指定的密钥太长;最大密钥长度为767字节”
请注意,这不是的副本;这个问题建议将独特的列长度缩短为“我已经尝试过了,但没有成功。”请发布您尝试过的内容-这可能是我们需要的help@DaniSpringer如果你想知道细节,我试着将密码和电子邮件字段缩短到214。你的编码是什么?254个字符,每个字符最多4个字节(utf8mb4),等于1016个字节。@IljaEveriläI不知道。我想,不管默认的MySQL编码是什么,“我已经尝试过了,但没有成功。”请发布您尝试过的内容——这可能是我们需要的help@DaniSpringer如果你想知道细节,我试着将密码和电子邮件字段缩短到214。你的编码是什么?254个字符,每个字符最多4个字节(utf8mb4),等于1016个字节。@IljaEveriläI不知道。我想不管默认的MySQL编码是什么。
CREATE TABLE users (
id INTEGER NOT NULL AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
password VARCHAR(255) NOT NULL DEFAULT '',
email VARCHAR(254) NOT NULL,
confirmed_at DATETIME,
is_enabled BOOL NOT NULL,
PRIMARY KEY (id),
UNIQUE (username),
UNIQUE (email),
CHECK (is_enabled IN (0, 1))
)