2011-07-26 118 views
15

我試圖將一個長文本(在我的情況下是一個原始的RSS源,但也可能是長博客文章或類似的內容)存儲到MySql數據庫。如何使用Rails將長文本存儲到MySql DB?

我有一個遷移:

change_column :contents, :description, :longtext 

但是,這給出了一個schema.rb有:

t.text  "description",  :limit => 2147483647 

當限制其實應該已經被設置爲4294967295

爲什麼Rails是否強加了一個上限,這是應該可能的一半?

回答

15

我不知道是否支持rails:longtext正式在以前的版本中,但在當前版本中根據rails documentation,:longtext其實沒有被指定爲合法的數據類型。我認爲這只是mysql適配器的一個方便之處,它將它轉換爲:text。

正確的方式做到這一點則是:

change_column:內容:說明:文字:極限=> 4294967295

務請注意有效的最大尺寸使用多的時候少字節字符。

編輯:再想一想,它是有道理的,導軌減半的大小。重新閱讀關於這個話題的mysql docs,他們談到有效大小。我猜想填充2個字節的UTF-8字符時,指定2147483647可能會導致有效大小爲4294967295。由於UTF-8是Ruby 1.9中的默認編碼(至少在我的機器上),它是唯一正確的方法。我認爲?!

ruby-1.9.2-p136 :002 > "".encoding 
=> #<Encoding:UTF-8> 
+0

謝謝!你所說的有效大小和rails utf-8默認編碼有很大意義。 – Magne