Yii2迁移如何设置longtext类型?MySQL下string()为何生成varchar(255)
嘿,这个问题我之前也帮不少开发者排查过——你用$this->string()却得到varchar(255),核心原因是Yii2迁移工具里的string()方法默认会生成长度为255的VARCHAR类型,哪怕你没有指定长度参数,它也会自动用255作为默认值,所以最终数据库里的bodytext字段就变成了varchar(255)。
解决方法:改用longText()方法
要在MySQL中创建longtext类型的字段,你需要直接使用Yii2迁移提供的longText()方法,这个方法专门对应MySQL的longtext类型,能满足你存储大段文本内容的需求。
修改后的迁移代码示例:
$this->createTable('mail_eingang', [ 'id' => $this->primaryKey(), 'mail_adresse_absender' => $this->string(255)->notNull(), 'betreff' => $this->string(255), 'bodytext' => $this->longText(), // 这里替换成longText()即可生成longtext类型 // 其他字段继续保留... ]);
额外补充:Yii2迁移文本类型对应关系
如果之后你需要不同长度的文本字段,可以参考Yii2和MySQL的类型对应:
$this->string(n):对应MySQL的varchar(n),n默认值为255$this->text():对应MySQL的text类型(最大存储约65KB内容)$this->mediumText():对应MySQL的mediumtext类型(最大存储约16MB内容)$this->longText():对应MySQL的longtext类型(最大存储约4GB内容)
根据你的实际存储需求选对应的方法就好~
内容的提问来源于stack exchange,提问作者tklustig
相关产品推荐
相关产品推荐

