首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Rails生成“schema.rb”并支持MySQL?

如何使Rails生成“schema.rb”并支持MySQL?
EN

Stack Overflow用户
提问于 2011-03-16 08:49:22
回答 1查看 4.9K关注 0票数 6

我使用的是Rails 3.0.5。我正在使用MySQL作为数据库存储。我有一个模型,其中一个列需要是BIGINT。我在创建迁移文件中使用了以下内容:

代码语言:javascript
复制
t.column  :my_column_name,       :bigint

效果很好。

但是,当我跑的时候

rake :迁移

生成的'schema.rb‘文件为特定列创建以下行:

代码语言:javascript
复制
t.integer  "my_column_name",       :limit => 8

这是不对的。

我的问题是我哪里错了?为了得到正确的'schema.rb‘文件,我应该做些什么吗?我能改变生成'schema.rb‘文件的方式吗?

请注意,“schema.rb”文件错误这一事实给我的连续集成服务器带来了问题,它运行测试并使用'schema.rb‘文件从头创建数据库(在运行测试之前)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-16 15:32:07

我现在意识到

代码语言:javascript
复制
t.integer "my_column_name", :limit => 8

使用my_sql驱动程序在schema.rb文件中是正确的。

使用“schema.rb”文件生成的数据库将创建一个

代码语言:javascript
复制
bigint(20)

虽然这看起来很奇怪。

我通过研究my_sql适配器的代码发现了这一点,我在这里引用的代码片段如下:

代码语言:javascript
复制
 def type_to_sql(type, limit = nil, precision = nil, scale = nil)
       return super unless type.to_s == 'integer'
        case limit
        when 1; 'tinyint'
        when 2; 'smallint'
        when 3; 'mediumint'
        when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
        when 5..8; 'bigint'
        else raise(ActiveRecordError, "No integer type has byte size #{limit}")
        end
      end

很明显,限制=> 8最终将在mysql中创建一个bigint。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5322864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档