2011-07-26 13 views
15

Bir MySql veritabanına uzun bir metin (benim durumumda bir raw rss feed'i, ancak uzun bir blog yazısı veya benzeri olabilir) depolamaya çalışıyorum.Rails kullanarak uzun metin MySql DB'ye nasıl depolanır?

Ben bir göç var:

change_column :contents, :description, :longtext 

Ama bu bir schema.rb verir: Limit aslında 4294967295

Neden ayarlı olması gerekirdi

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

Rails, mümkün olanın yarısı olan bir üst sınır uygular mı?

cevap

15

Rayların desteklenip desteklenmediğini bilmiyorum: longtext resmi olarak önceki sürümlerde, ancak geçerli sürümde rails documentation'a göre: longtext aslında yasal veri türü olarak belirtilmemiş. Bence bunu metne çeviren mysql adaptörünün rahatlığı.

bunu yapmak için doğru yolu o zaman:

change_column: içindekiler: açıklama, metin,: sınır => 4294967295

o çok kullanılırken etkili maksimum boyutu az olduğunu akla tutun bayt karakterler.

Düzenleme: Bir saniye hakkında düşünmek ve rayların büyüklüğünü yarıya indirdiği anlaşılır. Bu konuyla ilgili mysql docs yeniden okunurken, etkili boyutundan bahsediyorlar. Ben 2147483647 belirterek tahmin 2 bayt UTF-8 karakterleri ile dolu 4294967295 etkili bir boyuta yol açabilir. UTF-8, ruby ​​1.9'daki varsayılan kodlama olduğundan (en azından makinemde), bunu yapmanın tek doğru yolu budur. Bence?!

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

Teşekkürler! Etkili boyut ve raylar utf-8 varsayılan kodlama hakkında söylediklerini çok anlamlı hale getirir. – Magne

İlgili konular