Her şey ile katılıyorum söyledi a_horse_with_no_name tarafından ve genellikle Erwin'ın açıklama tavsiye ile anlaşmak:
Hayır, char daha düşük (ve modası geçmiş). metin ve varchar (neredeyse) aynı şeyi yapar.
Meta veri
Bir küçük istisna olmak üzere, tek sefer kullanım char()
ı meta veriler bu demek istediğinizde ise zorunluluk bulunuyorsa hala röntgen karakterleri. Her ne kadar char()
sadece giriş sınırın üzerindeyse şikayetçi olduğumu bilsem de, sık sık alt sınırlara karşı bir CHECK
kısıtlama ile koruyacağım . Örneğin,
CREATE TABLE foo (
x char(10) CHECK ( length(x) = 10 )
);
INSERT INTO foo VALUES (repeat('x', 9));
Bunu birkaç nedenden dolayı yapıyorum,
char(x)
bazen sabit genişlikli bir sütun olarak şema yükleyicilerle çıkarılır. Bu, sabit genişlikli dizeler için optimize edilmiş bir dilde fark yaratabilir.
- Anlamlı ve kolayca uygulanabilen bir sözleşme kurar. Bu kuraldan kod oluşturmak için bir dilde bir şema yükleyici yazabilirim.
Bunu nerede yapabileceğimin bir örneğine ihtiyacım var,
- İki harfli eyalet kısaltmaları olsa da, bu liste numaralandırılabildiğinden, genellikle bir ile yapacağım
ENUM
.
- Araç Kimlik Numaraları
- Model Numaraları (sabit boyutlu)
Hatalarda
Bazı insanlar sınırın her iki tarafındaki hata mesajlarının tutarsızlığından rahatsız olabilir, ancak beni rahatsız etmiyor
test=# INSERT INTO foo VALUES (repeat('x', 9));
ERROR: new row for relation "foo" violates check constraint "foo_x_check"
DETAIL: Failing row contains (xxxxxxxxx ).
test=# INSERT INTO foo VALUES (repeat('x', 11));
ERROR: value too long for type character(10)
İle kontrast varchar
Dahası, yukarıdaki öneri neredeyse her zaman kullanımtext
kuralına gerçekten iyi uyuyor . Sen de soruyorsun varchar(n)
. Bunu asla kullanmam . En azından son kullandığım zamanı hatırlayamıyorum varchar(n)
.
- Bir spesifikasyonun güvendiğim bir statik genişlik alanı varsa
char(n)
,
- Aksi takdirde,
text
etkin bir şekilde kullanıyorum varchar
(sınır yok)
Anlamlı değişken uzunluklu metin anahtarları olan ve sabit bir maksimum uzunluğa sahip olduğum için güvenilen bir özellik buldum, ben de kullanırdım varchar(n)
. Ancak, bu kriterlere uyan hiçbir şey düşünemiyorum.
Ek Notlar
char
burada"char"
tek baytlık bir tür olan ve sağlam performans ve yerden tasarruf sağlayan faydaları olan karıştırılmamalıdır.
İlgili Soru-Cevap: