CREATE TABLE t (c1 char(10), c2 varchar(10));
INSERT INTO t VALUES ('abc', 'abc');
SELECT length(c1), length(c2) FROM t;Bu sorgu ne döner?
- a3 ve 3 — length() char(n)'in sondaki dolgu boşluklarını yok sayar✓
- b10 ve 3 — char(n) her zaman tanımlı genişliğini raporlar
- c10 ve 10 — iki sütun da tanımlı genişliğini raporlar
- d3 ve 10 — varchar(n) tanımlı genişliğini raporlar, char(n) raporlamaz
Açıklama:char(n), depolanan değeri n uzunluğuna kadar sondan boşlukla doldurur; ama length() (çoğu string fonksiyonu gibi) sondaki dolgu boşluklarını anlamsız sayıp saymadan önce siler. Bu yüzden c1 fiziksel olarak 10 byte'a doldurulmuş olsa da length() her ikisi için de 3 döner.