{"id":221,"title":"SQL Notlar\u0131: Veri T\u00fcrleri ve Depolama","content":"<p>## Veri T\u00fcrleri ve Depolama<\/p><p>MySQL, farkl\u0131 t\u00fcrde verileri depolamak i\u00e7in \u00e7e\u015fitli veri t\u00fcrleri sunar. Bu veri t\u00fcrleri, verilerin nas\u0131l saklanaca\u011f\u0131n\u0131 ve i\u015flenece\u011fini belirler. \u0130\u015fte MySQL'de s\u0131k\u00e7a kullan\u0131lan baz\u0131 veri t\u00fcrleri:<\/p><p>### 1. **CHAR(n) ve VARCHAR(n)**<\/p><p>- **CHAR(n)**: Sabit uzunlukta bir string t\u00fcr\u00fcd\u00fcr. `n` karakter uzunlu\u011funda bir alan kaplar. \u00d6rne\u011fin, `CHAR(10)` olarak tan\u0131mlanan bir s\u00fctun, 10 karakterlik bir alan kaplar, i\u00e7eri\u011fi ne olursa olsun.<br>- **VARCHAR(n)**: De\u011fi\u015fken uzunlukta bir string t\u00fcr\u00fcd\u00fcr. `n` karaktere kadar veri depolayabilir, ancak yaln\u0131zca kullan\u0131lan kadar alan kaplar. \u00d6rne\u011fin, `VARCHAR(100)` olarak tan\u0131mlanan bir s\u00fctun, 100 karaktere kadar veri depolayabilir, ancak yaln\u0131zca girilen karakter kadar alan kaplar.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>CREATE TABLE users (<br>&nbsp; &nbsp;username VARCHAR(50),<br>&nbsp; &nbsp;country_code CHAR(2) CHARACTER SET ascii<br>);<br>```<\/p><p>### 2. **DATE, DATETIME, TIMESTAMP, YEAR ve TIME**<\/p><p>- **DATE**: Yaln\u0131zca tarih bilgisini depolar. Format\u0131 `YYYY-MM-DD` \u015feklindedir.<br>- **DATETIME**: Tarih ve saat bilgisini depolar. Format\u0131 `YYYY-MM-DD HH:MM:SS` \u015feklindedir.<br>- **TIMESTAMP**: Tarih ve saat bilgisini depolar, ancak Unix zaman damgas\u0131 olarak saklar. Format\u0131 `YYYY-MM-DD HH:MM:SS` \u015feklindedir, ancak aral\u0131\u011f\u0131 1970'ten 2038'e kadard\u0131r.<br>- **YEAR**: Yaln\u0131zca y\u0131l bilgisini depolar. 1901 ile 2155 aras\u0131ndaki y\u0131llar\u0131 destekler.<br>- **TIME**: Yaln\u0131zca saat bilgisini depolar. Format\u0131 `HH:MM:SS` \u015feklindedir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>CREATE TABLE events (<br>&nbsp; &nbsp;event_name VARCHAR(100),<br>&nbsp; &nbsp;event_date DATE,<br>&nbsp; &nbsp;event_time TIME<br>);<br>```<\/p><p>### 3. **INT, FLOAT, DOUBLE ve DECIMAL**<\/p><p>- **INT**: Tam say\u0131 de\u011ferlerini depolar. Boyutuna g\u00f6re `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` ve `BIGINT` gibi t\u00fcrleri vard\u0131r.<br>- **FLOAT ve DOUBLE**: Yakla\u015f\u0131k ondal\u0131k say\u0131 de\u011ferlerini depolar. `FLOAT` 4 byte, `DOUBLE` ise 8 byte yer kaplar.<br>- **DECIMAL**: Kesin ondal\u0131k say\u0131 de\u011ferlerini depolar. Para gibi kesinlik gerektiren de\u011ferler i\u00e7in idealdir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>CREATE TABLE products (<br>&nbsp; &nbsp;product_id INT AUTO_INCREMENT,<br>&nbsp; &nbsp;price DECIMAL(10, 2),<br>&nbsp; &nbsp;weight FLOAT<br>);<br>```<\/p><p>### 4. **BIT ve BLOB**<\/p><p>- **BIT**: Bit de\u011ferlerini depolar. \u00d6zellikle bayrak (flag) de\u011ferleri i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br>- **BLOB**: B\u00fcy\u00fck ikili verileri (binary large objects) depolar. \u00d6rne\u011fin, resim veya dosya gibi veriler i\u00e7in kullan\u0131l\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>CREATE TABLE images (<br>&nbsp; &nbsp;image_id INT AUTO_INCREMENT,<br>&nbsp; &nbsp;image_data BLOB<br>);<br>```<\/p><p>## Veri T\u00fcrleri ve Performans<\/p><p>Veri t\u00fcrlerini se\u00e7erken, performans ve depolama gereksinimlerini dikkate almak \u00f6nemlidir. \u00d6rne\u011fin, `VARCHAR` yerine `CHAR` kullanmak, sabit uzunluklu veriler i\u00e7in daha verimli olabilir. Ancak, `VARCHAR` de\u011fi\u015fken uzunluklu veriler i\u00e7in daha esnektir ve daha az depolama alan\u0131 kullan\u0131r.<\/p><p>Ayr\u0131ca, `TEXT` t\u00fcrleri, b\u00fcy\u00fck metin verileri i\u00e7in kullan\u0131\u015fl\u0131 olsa da, karma\u015f\u0131k sorgularda performans sorunlar\u0131na neden olabilir. Bu nedenle, `VARCHAR` gibi daha k\u00fc\u00e7\u00fck veri t\u00fcrleri tercih edilmelidir.<\/p><p>## Otomatik D\u00f6n\u00fc\u015ft\u00fcrme (Implicit Casting)<\/p><p>MySQL, baz\u0131 durumlarda veri t\u00fcrlerini otomatik olarak d\u00f6n\u00fc\u015ft\u00fcrebilir. \u00d6rne\u011fin, bir string de\u011feri say\u0131sal bir i\u015flemde kullan\u0131ld\u0131\u011f\u0131nda, MySQL bu stringi otomatik olarak say\u0131ya d\u00f6n\u00fc\u015ft\u00fcrebilir:<\/p><p>```sql<br>SELECT '123' * 2; &nbsp;-- Sonu\u00e7: 246<br>```<\/p><p>Ancak, bu t\u00fcr otomatik d\u00f6n\u00fc\u015ft\u00fcrmeler bazen beklenmeyen sonu\u00e7lara yol a\u00e7abilir. \u00d6rne\u011fin:<\/p><p>```sql<br>SELECT 'ABC123' * 2; &nbsp;-- Sonu\u00e7: 0<br>```<\/p><p>Bu nedenle, veri t\u00fcrlerini a\u00e7\u0131k\u00e7a belirtmek ve otomatik d\u00f6n\u00fc\u015ft\u00fcrmelerden ka\u00e7\u0131nmak genellikle daha g\u00fcvenlidir.<\/p><p>---<\/p><p>Bu bilgilerle, MySQL'deki veri t\u00fcrlerini ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 daha iyi anlayabilirsiniz. Bir sonraki yaz\u0131da, daha geli\u015fmi\u015f SQL sorgular\u0131 ve performans optimizasyonu konular\u0131na de\u011finece\u011fiz.<\/p><p>&nbsp;<\/p>","excerpt":"MySQL, farkl\u0131 t\u00fcrde verileri depolamak i\u00e7in \u00e7e\u015fitli veri t\u00fcrleri sunar. Bu veri t\u00fcrleri, verilerin nas\u0131l saklanaca\u011f\u0131n\u0131 ve i\u015flenece\u011fini belirler.","created_at":"2025-01-13 14:30:40","updated_at":"2026-09-05 03:29:14","category_id":9,"view_count":623,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 14:30:40","featured_image":"resimyok.jpg","slug":"sql-notlari-veri-turleri-ve-depolama","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"}