2011-01-28 8 views
5

Bir alanda farklı değerler alacak bir tablo oluşturuyorum, "değer" alanının bir sayı, küçük bir dize veya büyük bir metin olabileceği bir günlük tablosunu düşünün.
Metin olarak bu "değer" alanını yaratın ya da metin, tarih, sayı ve küme gibi küçük girişler için ve sadece Metin girişleri için bir tane olmak üzere iki alan oluşturun.Mysql'deki dinamik alan için varchar veya metni kullanın.

, benim sorum şu: Bu "değer" alanı, Metin olarak başka bir "değer2" ile birlikte bir Varchar olmalı ya da mysql'nin bunu düzgün bir şekilde yöneteceği bir alan metni oluştursun mu?

Tek bir metin alanı oluşturmanın performans için kötü bir şey olabileceğinden korkuyorum.

DÜZENLEME: sayı, tarih saat vb yerleştirilmeden önce dize olarak döküm olacak, noktası

Teşekkür,
Joe thats değil

+0

Veya belki de sadece böyle bir şey yapamazsınız? Bu tablonun amacı nedir? – Mchl

+0

bunlar toplu komutlardır. Kullanıcılar nesneleri oluşturabilirler ancak admin – Jonathan

+0

tarafından onaylanana kadar kaydedilmeyecekler ve diğer kullanıcılar için bu nesneler için güncellemeler veya eklemeler olduğunu gösterebilmeliyim, bu yüzden – Jonathan

cevap

3

En büyük girdinin ne kadar büyük olacağını biliyor musunuz? Bir limit empoze ederseniz veya maksimum girişin ne kadar büyük olacağını biliyorsanız, varchar (.310 sürümlerinde 255 karakter ve kapaklarda> 65.535 olan kapaklar = 5.0.3) kullanabilirsiniz. Aksi takdirde, muhtemelen Metin ile daha iyi durumdasınız çünkü önemli ölçüde daha fazla tutar (65,535 * 2^16-1).

Diğer bir seçenek olarak, kullanıcılar zaten bir tabloya sahip olan şeyler oluşturuyorsa (bir takvime etkinlik eklemek gibi), tabloya bir "is_approved" sütunu ekleyebilir ve yalnızca onaylananları görüntüleyebilir veya çiftleri kontrol et.

http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html

+1

TEXT de 2^16-1 = 65535B'de (baytlar, karakterler değil, çok baytlı kodlamalar konusunda dikkatli) başlıklıdır. MEDUIMTEXT 2^24-1 ve LONGTEXT 2^32-1'dir. – Mchl

0

farklı giriş Diyelim söz olduğunu işleyebilir varchar alan ancak bir tamsayı olarak veya datetime olarak değil.

+0

evet, aynı şeyi oluşturmayacak veya güncelleyemeyecekler, malzeme, alana eklenmeden önce dize olarak dökülecek, ancak, bir boolean 0, -1 veya ürünün tanımı gibi tam bir metin gibi çok küçük şeyler olabilir. Sorum şu: eğer bir alan Metin kullanabiliyorsa ya da bir tane varchar ve bunları işlemek için bir Metin oluşturmalı mıyım? veya hatta spesifik, int, float, datetime, varchar, text gibi her türden birini yaratın ... – Jonathan

+0

Tek bir varchar alanı bunların tümünü tutabilir. – programmer

1

kullanımı varchar() saklanan verilerin bu uzunluğu için bir sınır yoktur ise somut sınır daha sonra varsa

(MySQL gibi 5.0.3 varchar maksimum uzunlukta olabilir kadar 65.535) bir 'metin' alan türü kullanın.

+0

Aynı zamanda 65535B ... – Mchl

+0

@Mchl ile sınırlıdır, bu doğrudur, ancak eğer üst sınırı biliyorsanız (ve 65.535'den azsa), o zaman bir varchar() kullanmak db ile çalışmak için daha verimlidir. – RDL

+0

Peki neden 64kB'den daha uzun değerler için TEXT öneriyorsunuz? ;) En azından [ORTA | UZUN] TEXT öner. Ayrıca MyISAM'ın satır başına sadece 64 kb (BLOB/METİN hariç) tutabileceğini unutmayın, böylece tam genişlikte bir değişken varchar sütununa sahip olamazsınız. – Mchl

İlgili konular