## Veri Türleri ve Depolama
MySQL, farklı türde verileri depolamak için çeşitli veri türleri sunar. Bu veri türleri, verilerin nasıl saklanacağını ve işleneceğini belirler. İşte MySQL’de sıkça kullanılan bazı veri türleri:
### 1. **CHAR(n) ve VARCHAR(n)**
– **CHAR(n)**: Sabit uzunlukta bir string türüdür. `n` karakter uzunluğunda bir alan kaplar. Örneğin, `CHAR(10)` olarak tanımlanan bir sütun, 10 karakterlik bir alan kaplar, içeriği ne olursa olsun.
– **VARCHAR(n)**: Değişken uzunlukta bir string türüdür. `n` karaktere kadar veri depolayabilir, ancak yalnızca kullanılan kadar alan kaplar. Örneğin, `VARCHAR(100)` olarak tanımlanan bir sütun, 100 karaktere kadar veri depolayabilir, ancak yalnızca girilen karakter kadar alan kaplar.
**Örnek Kullanım:**
“`sql
CREATE TABLE users (
username VARCHAR(50),
country_code CHAR(2) CHARACTER SET ascii
);
“`
### 2. **DATE, DATETIME, TIMESTAMP, YEAR ve TIME**
– **DATE**: Yalnızca tarih bilgisini depolar. Formatı `YYYY-MM-DD` şeklindedir.
– **DATETIME**: Tarih ve saat bilgisini depolar. Formatı `YYYY-MM-DD HH:MM:SS` şeklindedir.
– **TIMESTAMP**: Tarih ve saat bilgisini depolar, ancak Unix zaman damgası olarak saklar. Formatı `YYYY-MM-DD HH:MM:SS` şeklindedir, ancak aralığı 1970’ten 2038’e kadardır.
– **YEAR**: Yalnızca yıl bilgisini depolar. 1901 ile 2155 arasındaki yılları destekler.
– **TIME**: Yalnızca saat bilgisini depolar. Formatı `HH:MM:SS` şeklindedir.
**Örnek Kullanım:**
“`sql
CREATE TABLE events (
event_name VARCHAR(100),
event_date DATE,
event_time TIME
);
“`
### 3. **INT, FLOAT, DOUBLE ve DECIMAL**
– **INT**: Tam sayı değerlerini depolar. Boyutuna göre `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` ve `BIGINT` gibi türleri vardır.
– **FLOAT ve DOUBLE**: Yaklaşık ondalık sayı değerlerini depolar. `FLOAT` 4 byte, `DOUBLE` ise 8 byte yer kaplar.
– **DECIMAL**: Kesin ondalık sayı değerlerini depolar. Para gibi kesinlik gerektiren değerler için idealdir.
**Örnek Kullanım:**
“`sql
CREATE TABLE products (
product_id INT AUTO_INCREMENT,
price DECIMAL(10, 2),
weight FLOAT
);
“`
### 4. **BIT ve BLOB**
– **BIT**: Bit değerlerini depolar. Özellikle bayrak (flag) değerleri için kullanışlıdır.
– **BLOB**: Büyük ikili verileri (binary large objects) depolar. Örneğin, resim veya dosya gibi veriler için kullanılır.
**Örnek Kullanım:**
“`sql
CREATE TABLE images (
image_id INT AUTO_INCREMENT,
image_data BLOB
);
“`
## Veri Türleri ve Performans
Veri türlerini seçerken, performans ve depolama gereksinimlerini dikkate almak önemlidir. Örneğin, `VARCHAR` yerine `CHAR` kullanmak, sabit uzunluklu veriler için daha verimli olabilir. Ancak, `VARCHAR` değişken uzunluklu veriler için daha esnektir ve daha az depolama alanı kullanır.
Ayrıca, `TEXT` türleri, büyük metin verileri için kullanışlı olsa da, karmaşık sorgularda performans sorunlarına neden olabilir. Bu nedenle, `VARCHAR` gibi daha küçük veri türleri tercih edilmelidir.
## Otomatik Dönüştürme (Implicit Casting)
MySQL, bazı durumlarda veri türlerini otomatik olarak dönüştürebilir. Örneğin, bir string değeri sayısal bir işlemde kullanıldığında, MySQL bu stringi otomatik olarak sayıya dönüştürebilir:
“`sql
SELECT ‘123’ * 2; — Sonuç: 246
“`
Ancak, bu tür otomatik dönüştürmeler bazen beklenmeyen sonuçlara yol açabilir. Örneğin:
“`sql
SELECT ‘ABC123’ * 2; — Sonuç: 0
“`
Bu nedenle, veri türlerini açıkça belirtmek ve otomatik dönüştürmelerden kaçınmak genellikle daha güvenlidir.
—
Bu bilgilerle, MySQL’deki veri türlerini ve nasıl kullanılacağını daha iyi anlayabilirsiniz. Bir sonraki yazıda, daha gelişmiş SQL sorguları ve performans optimizasyonu konularına değineceğiz.