MySQL'de VARCHAR ve CHAR arasındaki fark nedir?
MD5 karmalarını depolamaya çalışıyorum.
MySQL'de VARCHAR ve CHAR arasındaki fark nedir?
MD5 karmalarını depolamaya çalışıyorum.
Yanıtlar:
VARCHAR
değişken uzunluktadır.
CHAR
sabit uzunluktadır.
İçeriğiniz sabit bir boyutta ise, daha iyi performans elde edersiniz CHAR
.
Ayrıntılı bir açıklama için CHAR ve VARCHAR Tipleri'ndeki MySQL sayfasına bakın (yorumları da okuyun).
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR Vs VARCHAR
CHAR Sabit Uzunluk Boyut Değişkeni
için kullanılır VARCHAR Değişken Uzunluk Boyut Değişkeni için kullanılır.
Örneğin
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
Çıktı
length(City) Length(street)
10 6
Sonuç: Değişken uzunluk değişkense depolama alanını verimli kullanmak için CHAR yerine VARCHAR kullanmalısınız
Bir CHAR(x)
sütunda yalnızca tam x
karakterler olabilir.
Bir VARCHAR(x)
sütunda en fazla x
karakter olabilir.
MD5 karma değerleriniz her zaman aynı boyutta olacağından, muhtemelen bir CHAR
.
Ancak, öncelikle MD5 kullanmamalısınız; bilinen zayıflıkları vardır.
Bunun yerine SHA2 kullanın.
Parolaları karmayorsanız, bcrypt kullanmalısınız.
MySQL'de VARCHAR ve CHAR arasındaki fark nedir?
Zaten yanıtlar vermek için, OLTP sistemlerinde veya sık güncellemelere sahip sistemlerde, güncellemeler sırasında CHAR
olası VARCHAR
sütun parçalanması nedeniyle değişken boyutlu sütunlar için bile kullanmayı düşünün .
MD5 karmalarını depolamaya çalışıyorum.
Güvenlik gerçekten önemliyse MD5 karma en iyi seçim değildir. Ancak, herhangi bir karma işlev kullanacaksanız, BINARY
bunun yerine türü düşünün (örn. MD5 16 baytlık karma üretecektir, bu nedenle onaltılık basamakları temsil eden 32 karakter BINARY(16)
yerine yeterli CHAR(32)
olacaktır.
Varchar, girilen karakterler belirtilen uzunluktan daha kısaysa arka boşlukları keser, ancak char olmaz. Char boşlukları doldurur ve her zaman belirtilen uzunluğun uzunluğu olur. Verimlilik açısından, varchar karakterleri daha fazla ayarlamaya izin vermek için kırptığı için daha beceriklidir. Ancak, karakter uzunluğunu tam olarak biliyorsanız, karakter biraz daha hızlı çalışacaktır.
Bugün birçok RDBMS'de, eşanlamlıdır. Bununla birlikte, hala bir ayrımı olan sistemler için bir CHAR alanı sabit genişlikli sütun olarak saklanır. CHAR (10) olarak tanımlarsanız, tabloya 10 karakter yazılır ve burada verilerin kullanılmadığı boşlukları doldurmak için "dolgu" (genellikle boşluklar) kullanılır. Örneğin, "bob" un kaydedilmesi ("bob" +7 boşluk) olarak kaydedilir. Bir VARCHAR (değişken karakter) sütunu, bir CHAR sütununun yaptığı fazladan alanı boşa harcamadan verileri depolamak içindir.
Her zaman olduğu gibi Wikipedia daha yüksek sesle konuşuyor.
CHAR sabit uzunluklu bir alandır; VARCHAR değişken uzunluklu bir alandır. Dizeleri adlar gibi çılgınca değişken uzunlukta saklıyorsanız, bir VARCHAR kullanın, eğer uzunluk her zaman aynı ise, biraz daha boyut etkin ve aynı zamanda biraz daha hızlı olduğu için bir CHAR kullanın.
CHAR sabit uzunluk ve VARCHAR değişken uzunluktur. CHAR, giriş başına her zaman aynı miktarda depolama alanı kullanırken VARCHAR yalnızca gerçek metni depolamak için gereken miktarı kullanır.
Karakter sabit uzunluklu bir karakter veri tipidir, varchar değişken uzunluklu karakter veri tipidir.
Char sabit uzunluklu bir veri türü olduğundan, char değerinin depolama boyutu bu sütun için maksimum boyuta eşittir. Varchar değişken uzunlukta bir veri türü olduğundan, varchar değerinin depolama boyutu, bu sütun için maksimum boyut değil, girilen verilerin gerçek uzunluğudur.
Bir sütundaki veri girişlerinin aynı boyutta olması beklendiğinde char kullanabilirsiniz. Bir sütundaki veri girişlerinin boyut olarak önemli ölçüde değişmesi beklendiğinde varchar kullanabilirsiniz.
göre Yüksek Performanslı MySQL kitabında:
VARCHAR , değişken uzunluklu karakter dizelerini saklar ve en yaygın dize veri türüdür. Sabit uzunluklu tiplerden daha az depolama alanı gerektirebilir, çünkü yalnızca ihtiyaç duyduğu kadar alan kullanır (yani daha kısa değerleri saklamak için daha az alan kullanılır). İstisna, ROW_FORMAT = FIXED ile oluşturulan ve her satır için diskte sabit bir alan kullanan ve dolayısıyla alan israfına neden olan bir MyISAM tablosudur. VARCHAR , yerden tasarruf sağladığı için performansa yardımcı olur .
CHAR sabit uzunluktadır: MySQL her zaman belirtilen karakter sayısı için yeterli alan ayırır. Bir CHAR değeri saklanırken, MySQL arkadaki boşlukları kaldırır. (Bu, MySQL 4.1 ve daha eski sürümlerindeki VARCHAR için de geçerliydi - CHAR ve VAR CHAR mantıksal olarak aynı ve yalnızca depolama biçiminde farklıydı.) Değerler, karşılaştırmalar için gereken boşluklarla doldurulur.
VARCHAR
belleği gerektiği gibi dinamik olarak ayırması gerekir, böylece performansı aksine performansı azaltır CHAR
, değil mi?
Char
sabit bir uzunluğa sahiptir (2000 karakteri destekler), karakter bir veri türüdür
Varchar
değişken bir uzunluğa sahiptir (4000 karakteri destekler)
Karakter veya varchar- uzunluğun parantez içinde gösterilebileceği metin verilerini girmek için kullanılır Örnek karakter (20)
(
ve )
değil dirsekleri, parantez vardır.
(
ve )
parantez kullanırız ve birçok İngiliz muhtemelen "parantez" kelimesinin noktalama işaretine işaret edebileceği İngiliz lehçeleri olduğunu fark etmez. "Parantez" i "parantez" e tercih etmek için güçlü bir durum var - muhtemelen dengede, programcıların uluslararası bir kitlesini hedeflerken maksimum netlik seçeneği - ama "parantezler" den daha karmaşık bir durum.