MySQL文本或BLOB类型不能唯一?

2024-10-03 17:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为users的表,下面是它的模式:

class User(db.Model):
__tablename__ = "Users"
id = db.Column(db.Integer, unique=True, primary_key=True)
firstname = db.Column(db.String(64), unique=False, nullable=False)
lastname = db.Column(db.String(64), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(93), unique=False, nullable=False)
phone = db.Column(db.String(10), unique=True, nullable=False)
publickey = db.Column(db.Text, unique=True, nullable=True)
isitseller = db.Column(db.Boolean, unique=False, nullable=False)
money = db.Column(db.Float, unique=False, nullable=False)

def __init__(self, firstname, lastname, email, password, phone, publickey, isitseller):
    self.firstname = firstname
    self.lastname = lastname
    self.email = email
    self.password = generate_password_hash(password)
    self.phone = phone
    self.publickey = publickey
    self.isitseller = isitseller
    self.money = 0.00

def check_password(self, password):
    return check_password_hash(self.password, password)

def __repr__(self):
    return '<User %r>' % self.firstname + " " + self.lastname

但是当我试图用全部创建数据库()它输出我

^{pr2}$

据我所知,我需要使用任何文本或BLOB类型的colun,但我如何才能做到这一点呢?或者用什么方法把文本或BLOB作为唯一的?在


Tags: selffalsetruedbstringemailphonecolumn
1条回答
网友
1楼 · 发布于 2024-10-03 17:28:08

你把“键”和“主键”搞混了。在MySQL中,键只是指上下文中的索引。在

我强烈建议您使用varchar()作为字段,而不是{},除非它真的很大。在

无论如何,MySQL对索引键的大小有限制。而且,text的大小是无限的。矛盾。正如documentation解释的那样,需要一个长度:

For indexes on BLOB and TEXT columns, you must specify an index prefix length. For CHAR and VARCHAR, a prefix length is optional. See Section 8.3.4, “Column Indexes”.

{2>不幸的是,你不能将这个列声明为一个惟一的索引,因为这个列也需要一个惟一的。在

我不认为unique语句中的unique接受长度。可以在前缀上定义唯一索引:

create unique index unq_users_ publickey on users(publickey(100));

注意最大长度。MySQL基于字节设置了一个限制,这意味着字符编码会影响最大字符数(100是安全的)。在

相关问题 更多 >