简体   繁体   English

Peewee mysql 无法在 TextField 字段上创建唯一索引

[英]Peewee mysql Failed creating unique index on TextField field

I am trying to create a model with unique index.我正在尝试创建一个具有唯一索引的 model。

My models look like that:我的模型看起来像这样:

class ModelA(Model):
    FieldA = CharField()

class ModelB(Model):
    fieldA = TextField(unique=True)
    fieldB = CharField(max_length=10)
    fieldC = BooleanField(default=False)
    fieldD = ForeignKeyField(ModelA)

And I'm creating the tables like this:我正在创建这样的表:

db.create_tables([ModelA, ModelB])

My problem is that after creating the table there's no index on ModelB.fieldA.我的问题是创建表后ModelB.fieldA 上没有索引。

When I changed ModelB.fieldA type to CharField instead of TextField:当我将 ModelB.fieldA 类型更改为 CharField 而不是 TextField 时:

class ModelA(Model):
    FieldA = CharField()

class ModelB(Model):
    fieldA = CharField(unique=True)
    fieldB = CharField(max_length=10)
    fieldC = BooleanField(default=False)
    fieldD = ForeignKeyField(ModelA)

It works properly and an index is created for ModelB.fieldA.它工作正常,并为 ModelB.fieldA 创建了一个索引。

Is there any reason I can't create a unique index on TextField field type?有什么原因我不能在 TextField 字段类型上创建唯一索引吗? How can I create a unique index on ModelB.fieldA and keeping it's type TextField?如何在 ModelB.fieldA 上创建唯一索引并保持其类型为 TextField?

Thanks谢谢

MySQL requires you to specify a prefix for indexes on text type: https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-column-prefixes MySQL 要求您为文本类型的索引指定前缀: https://dev.mysql.com/doc/refman/8.0/en/create-prefixindex.html#create-0/en/create-prefixindex.html#create-index-index.html

So you will want an index like:所以你会想要一个像这样的索引:

CREATE INDEX my_index ON my_model(text_column (100));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM