3

ここに私のスキーマがあります:

create_table "delayed_jobs", :force => true do |t|
    t.integer  "priority",   :default => 0
    t.integer  "attempts",   :default => 0
    t.text     "handler"
    t.text     "last_error"
    t.datetime "run_at"
    t.datetime "locked_at"
    t.datetime "failed_at"
    t.string   "locked_by"
    t.string   "queue"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

メールに遅延ジョブを使用しています。私の電子メールの 1 つに非常に長いハンドラー (50000 文字以上) が含まれており、ハンドラー テキスト フィールドに保存するときに、これが途切れてしまいます。通常、テキスト フィールドには何文字まで入力できますか? また、どのように文字数を増やす必要がありますか?

4

3 に答える 3

6

MySQL は 4 つの TEXT フィールド タイプをサポートします

(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)

種類ごとの制限は

> TINYTEXT  256 bytes     TEXT  65,535 bytes     MEDIUMTEXT  16,777,215 bytes   
> LONGTEXT  4,294,967,295 bytes

それに応じて変更できます。注:バイト単位のサイズは文字数です

于 2012-09-24T06:22:24.700 に答える
2

メッセージモデルでこれと同様の問題がありました。最初にモデルを作成したとき、メッセージ本文は文字列として定義されました

create_table :messages do |t|
  t.string :body, 
......
end

これにより、メッセージ本文が 256 文字に切り詰められました。そのため、その列を別の移行で変更しました。

def up
  change_table :messages do |t|
    t.change :body, :text
  end
end

mhasan が彼の回答で概説したように、:text の長さは 65535 バイトです。もっと長くする必要がある場合は、代わりに :mediumtext または :longtext を使用できます

于 2012-09-24T10:38:52.507 に答える
1

私が知る限り、Ruby 自体には文字列の長さに制限がないため、Rails に格納する文字列はデータベースの機能によって制限されます。

于 2012-09-24T08:36:04.203 に答える