Laravel Migration中text与longText字段有什么区别?
Laravel 数据库迁移中
text()与longText()的差异 Laravel 迁移的Schema构造器中,text()和longText()都用于定义长文本类型字段,二者的核心区别在MySQL/MariaDB环境下最为明确,其他数据库驱动下差异很小,具体如下:
- 存储能力与原生类型映射不同
不同数据库的适配规则:- MySQL/MariaDB 场景:
text()对应原生TEXT类型,单字段最大存储容量为64KB(65535字节,按utf8mb4字符集计算最多可存约1.6万汉字),字段额外用2个字节存储内容长度信息longText()对应原生LONGTEXT类型,单字段最大存储容量为4GB(4294967295字节),字段额外用4个字节存储内容长度信息
- PostgreSQL、SQLite、SQL Server 场景:两个方法最终映射的原生字段类型完全一致,没有存储容量的区别,均支持存储超大长度文本。
- MySQL/MariaDB 场景:
- 适用场景不同
text()适合存储长度可控的中等长度文本,比如文章摘要、用户短评、商品简介、普通多行表单输入内容,这类场景内容几乎不会突破64KB上限,存储开销更低,查询效率更高longText()适合存储有大体积需求的文本内容,比如长篇富文本文章、系统完整日志、大段JSON报文、长代码块、base64编码的文件内容等,避免内容超出长度被截断。
- 使用注意点
MySQL严格模式下,两种字段都不支持配置默认值;如果需要给这两类字段加索引,必须指定前缀长度,longText()因为内容长度跨度大,评估前缀索引区分度时需要更多测试。
参考迁移代码示例:
Schema::create('samples', function (Blueprint $table) { $table->id(); $table->text('title1'); $table->longText('title2'); $table->timestamps(); });
内容的提问来源于stack exchange,提问作者K. M. Shawkat Zamil
相关产品推荐
相关产品推荐

