Rails 6、ActiveRecord 和 Mysql 8,如何将字符串字段的长度设置为 512 个字符?

问题描述

有很多例子解释了如何创建不同长度的文本字段,但只有这些选项:

  • Tiny:256 字节(Rails 中的字符串等价物)
  • 文本:65_535 字节(相当于 Rails 中的文本)
  • 中文本:16_777_215 字节
  • 长文本:4_294_967_295 字节

我找到的所有参考文献都非常古老(> 3 岁)。这仍然有效吗?

我想创建一个 512 个字符的字符串字段。我应该选择 Text 列吗?看起来很浪费空间。我可以创建一个 512 字节的特定字段吗?

解决方法

看起来在新版本中,Mysql 文本字段允许字段大小有更多的粒度。

如果我在迁移中这样做:

change_column :scrapers,:url,:string,limit: 512

我在 sql 日志中看到了这一点:

ALTER TABLE `scrapers` CHANGE `url` `url` varchar(512) NOT NULL

这是mysql表结构中的:

`url` varchar(512) COLLATE utf8mb4_bin NOT NULL,