Laravel Migrations中MySQL String(VarChar)与Text的区别及适用场景
Laravel迁移中String与Text字段类型的差异及选型建议
二者本质是Laravel对底层数据库字段类型的封装,核心差异对应数据库层面varchar和text类型的区别
核心特性差异
$table->string(column_name, [length])- 默认映射为数据库的
varchar(255)类型,第二个参数可自定义最大长度,不同数据库对varchar的最大长度限制不同,以MySQL为例,utf8mb4编码下varchar最大可设置为16383字符 - 支持设置字段默认值,短长度的string字段可以直接创建普通/唯一索引,无需指定前缀
- 存储占用空间更小,查询性能高于text类型
- 默认映射为数据库的
$table->text(column_name)- 映射为数据库的
text类型,无自定义长度参数,MySQL下text类型最大支持存储64KB内容,更长的文本可使用Laravel提供的mediumText()、longText()方法 - 绝大多数数据库不支持text类型设置默认值,创建索引时必须指定前缀长度
- 适合存储长度不固定的长内容,查询性能低于varchar类型
- 映射为数据库的
选型建议
- 优先选用string的场景:存储长度可控的短内容,比如用户名、手机号、邮箱、页面标题、标签名等,这类内容长度基本不会超过预设上限,且通常需要加索引、设置默认值,使用string性能更优
- 优先选用text的场景:存储长度不可预估的长内容,比如文章正文、用户备注、商品详情、长日志内容、大段JSON数据等,这类内容长度通常会超过255字符,使用text无需担心长度溢出问题
小提示:如果你需要设置的string长度超过2000字符,二者的存储和性能差异已经极小,这种场景下也可以直接选择text类型,无需强行使用string。
内容的提问来源于stack exchange,提问作者Spencer Hill
相关产品推荐
相关产品推荐

