ActiveRecord::StatementInvalid: TinyTds::Error: 列、参数或变量 #6: 无法在数据类型 datetime 上指定列宽

问题描述 投票:0回答:1

我在生产服务器上部署时遇到此错误。 我在临时服务器中执行了相同的 ruby 迁移文件,它可以工作,但在生产版本中出现错误,例如,

      01 /usr/local/rvm/bin/rvm 3.2.0 do bundle exec rake db:migrate
      01 DEPRECATION WARNING: axlsx_rails has been renamed to caxlsx_rails. See http://github.com/caxlsx
      01 /var/www/new_zdm/shared/bundle/ruby/3.2.0/gems/activerecord-sqlserver-adapter-7.0.2.0/lib/active_record/connection_adapters/sqlserver_adapter.rb:111: warning: unde…
      01 == 20230621013249 CreateTenpoContractDetails: migrating =======================
      01 -- create_table(:tenpo_contract_details)
      01 rake aborted!
      01 StandardError: An error has occurred, this and all later migrations canceled:
      01
      01 TinyTds::Error: Column, parameter, or variable #6: Cannot specify a column width on data type datetime.`

` 我在迁移中没有指定任何宽度参数。 我正在分享迁移文件的示例文件

class CreateTenpoContractDetails < ActiveRecord::Migration[7.0]
  def change
    create_table :tenpo_contract_details do |t|
      t.string    :payment_payee
      t.datetime  :tenpo_start_date
      t.datetime  :tenpo_end_date
      t.datetime  :next_yoyaku_date
      t.datetime  :tenpo_open_date
      t.datetime  :tenpo_agreement_date
      t.datetime  :contract_expiration_date
      t.datetime  :contract_start_period
      t.datetime  :contract_end_period
      t.integer   :total_contract_period
      t.integer   :revise_number_of_year
      t.datetime  :condition_revision_schedule_date
      t.timestamps
    end
  end
end

有人可以帮助我吗?

我搜索了很多有关类似问题的链接,但没有得到解决方案。

Ruby版本:3.2.0 Rails 版本:7

sql-server ruby ruby-on-rails-3 migration tiny-tds
1个回答
0
投票

最近经历了类似的事情,发现我可以通过指定该行中的

precision
来解决它,例如

...
t.datetime  :tenpo_agreement_date, precision: 6
...

如果您的数据库不支持精度,该值也可以是

nil

https://guides.rubyonrails.org/active_record_migrations.html#column-modifiers

© www.soinside.com 2019 - 2024. All rights reserved.