Rails:用于创建固定长度 char(12) 列的迁移

发布于 2024-10-29 09:35:50 字数 184 浏览 1 评论 0原文

通过 Rails 迁移定义固定长度 SQL 列(例如 CHAR(12))的最佳方法是什么?

为什么模型不应该处理这个问题是因为 char() 与 varchar() 的性能不同,我想避免在数据库中注入原始 SQL。

编辑:我知道 :limit 修饰符,但是该字段仍然是 varchar (这对性能不利)并且不允许最小大小。

What is the best way to define a fixed-length SQL column (CHAR(12) for instance) through a Rails migration ?

Why this should not handled by the model is because of the performance of char() vs varchar(), and I'd like to avoid injecting raw SQL in the database.

Edit : I know the :limit modifier, however the field is still varchar (which is bad for performance) and does not allow a minimum size.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

很快妥协 2024-11-05 09:35:50

如果 Rails 不理解列类型,它会将其直接传递到数据库。因此,如果您想要 char 而不是 varchar,只需将: 替换

t.column :token, :string

为:

t.column :token, "char(12)"

当然,这可能会也可能不会使您的迁移不可移植到另一个数据库。

(归功于http://laurelfan.com/2010/1/26/special -mysql-types-in-rails-migrations)

If Rails doesn’t understand the column type, it’ll pass it straight through to the database. So if you want a char instead of varchar, just replace:

t.column :token, :string

With:

t.column :token, "char(12)"

Of course, this may or may not make your migrations non-portable to another database.

(credit to http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrations)

你的背包 2024-11-05 09:35:50
 def self.up
    add_column("admin_users", "username", :string, :limit => 25)
 end

 def self.down
    remove_column("admin_users", "username")
 end
 def self.up
    add_column("admin_users", "username", :string, :limit => 25)
 end

 def self.down
    remove_column("admin_users", "username")
 end
明媚如初 2024-11-05 09:35:50

您可以在迁移文件中使用带有限制选项的字符串类型,如下所示:

t.string :name, :limit => 12, :null => false

You can use string type with limit option in your migration file like this:

t.string :name, :limit => 12, :null => false
硪扪都還晓 2024-11-05 09:35:50

对于数据库特定类型,我们现在可以使用:

t.column(:column_name, 'char(12)')

对于完整的示例:

class Foo < ActiveRecord::Migration
  def change
     create_table :foo do |t|
       t.column(:column_name, 'custom_type')

       t.timestamps
     end
  end
end

For a database specific type, we can now use:

t.column(:column_name, 'char(12)')

And for a complete example:

class Foo < ActiveRecord::Migration
  def change
     create_table :foo do |t|
       t.column(:column_name, 'custom_type')

       t.timestamps
     end
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文