{"id":200,"title":"SQL Notlar\u0131: Karakter Setleri ve Kar\u015f\u0131la\u015ft\u0131rma Kurallar\u0131 (Collations)","content":"<p>MySQL'de karakter setleri ve kar\u015f\u0131la\u015ft\u0131rma kurallar\u0131, veritaban\u0131nda metin verilerinin nas\u0131l saklanaca\u011f\u0131n\u0131 ve nas\u0131l kar\u015f\u0131la\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirler. Bu yaz\u0131da, MySQL'de karakter setleri ve kar\u015f\u0131la\u015ft\u0131rma kurallar\u0131n\u0131n nas\u0131l kullan\u0131laca\u011f\u0131n\u0131, tablo ve s\u00fctun d\u00fczeyinde nas\u0131l ayarlanaca\u011f\u0131n\u0131 ele alaca\u011f\u0131z.<\/p><p>#### 1. Hangi Karakter Seti ve Kar\u015f\u0131la\u015ft\u0131rma Kural\u0131 Kullan\u0131lmal\u0131?<\/p><p>MySQL'de onlarca karakter seti ve y\u00fczlerce kar\u015f\u0131la\u015ft\u0131rma kural\u0131 bulunur. Ancak genellikle sadece birka\u00e7 karakter seti \u00f6nemlidir:<\/p><p>- **ascii**: Temel 7-bit karakterler.<br>- **latin1**: ASCII art\u0131 Bat\u0131 Avrupa dilleri i\u00e7in gerekli karakterler.<br>- **utf8**: 1, 2 ve 3 byte'l\u0131k UTF-8 karakterlerini i\u00e7erir. Emoji ve baz\u0131 \u00c7ince karakterleri i\u00e7ermez.<br>- **utf8mb4**: T\u00fcm UTF-8 karakterlerini i\u00e7erir ve t\u00fcm dilleri destekler.<\/p><p>**En iyi uygulama:**<\/p><p>- Metin veya `VARCHAR` s\u00fctunlar\u0131 i\u00e7in `utf8mb4` kullan\u0131n.<br>- Hex string'ler (UUID, MD5, vb.) ve basit kodlar (\u00fclke kodu, posta kodu, vb.) i\u00e7in `ascii` veya `latin1` kullan\u0131n.<\/p><p>#### 2. Tablo ve S\u00fctun D\u00fczeyinde Karakter Seti Ayarlama<\/p><p>Karakter setleri, hem tablo hem de s\u00fctun d\u00fczeyinde ayarlanabilir. A\u015fa\u011f\u0131daki \u00f6rnekte, `Address` tablosu i\u00e7in karakter seti ve s\u00fctun d\u00fczeyinde ayarlamalar g\u00f6sterilmi\u015ftir:<\/p><p>```sql<br>CREATE TABLE Address (<br>&nbsp; &nbsp;AddressID INTEGER NOT NULL PRIMARY KEY,<br>&nbsp; &nbsp;Street VARCHAR(80) CHARACTER SET ASCII,<br>&nbsp; &nbsp;City VARCHAR(80),<br>&nbsp; &nbsp;Country VARCHAR(80) DEFAULT \"United States\",<br>&nbsp; &nbsp;Active BOOLEAN DEFAULT 1<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<br>```<\/p><p>- **Street**: ASCII karakter seti kullan\u0131r.<br>- **City** ve **Country**: Tablonun varsay\u0131lan karakter seti olan `utf8mb4` kullan\u0131r.<\/p><p>#### 3. Ba\u011flant\u0131 D\u00fczeyinde Karakter Seti Ayarlama<\/p><p>MySQL sunucusuna, istemcinin kulland\u0131\u011f\u0131 karakter kodlamas\u0131n\u0131 belirtmek \u00f6nemlidir. Bu, `SET NAMES` komutu ile yap\u0131l\u0131r:<\/p><p>```sql<br>SET NAMES utf8mb4;<br>```<\/p><p>Bu komut, istemcinin `utf8mb4` karakter setini kulland\u0131\u011f\u0131n\u0131 MySQL sunucusuna bildirir. Bu, \u00f6zellikle farkl\u0131 karakter setleri kullan\u0131ld\u0131\u011f\u0131nda veri d\u00f6n\u00fc\u015f\u00fcmlerini otomatik olarak y\u00f6netir.<\/p><p>#### 4. MyISAM'dan InnoDB'ye D\u00f6n\u00fc\u015ft\u00fcrme<\/p><p>MyISAM ve InnoDB, MySQL'in iki farkl\u0131 depolama motorudur. InnoDB, i\u015flem deste\u011fi ve daha iyi performans sa\u011flar. MyISAM tablolar\u0131n\u0131 InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in a\u015fa\u011f\u0131daki komut kullan\u0131l\u0131r:<\/p><p>##### \u00d6rnek: Temel D\u00f6n\u00fc\u015ft\u00fcrme<\/p><p>```sql<br>ALTER TABLE foo ENGINE=InnoDB;<br>```<\/p><p>Bu komut, `foo` tablosunu MyISAM'den InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p><p>##### \u00d6rnek: Bir Veritaban\u0131ndaki T\u00fcm Tablolar\u0131 D\u00f6n\u00fc\u015ft\u00fcrme<\/p><p>Bir veritaban\u0131ndaki t\u00fcm MyISAM tablolar\u0131n\u0131 InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in a\u015fa\u011f\u0131daki SQL sorgusu kullan\u0131l\u0131r:<\/p><p>```sql<br>SET @DB_NAME = DATABASE();<\/p><p>SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements<br>FROM information_schema.tables<br>WHERE table_schema = @DB_NAME<br>&nbsp;AND ENGINE = 'MyISAM'<br>&nbsp;AND TABLE_TYPE = 'BASE TABLE';<br>```<\/p><p>Bu sorgu, veritaban\u0131ndaki t\u00fcm MyISAM tablolar\u0131n\u0131 InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in gerekli `ALTER TABLE` komutlar\u0131n\u0131 \u00fcretir. Bu komutlar\u0131 kopyalay\u0131p \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p><p>#### Sonu\u00e7<\/p><p>MySQL'de karakter setleri ve kar\u015f\u0131la\u015ft\u0131rma kurallar\u0131, veritaban\u0131nda metin verilerinin do\u011fru \u015fekilde saklanmas\u0131n\u0131 ve kar\u015f\u0131la\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. `utf8mb4`, modern uygulamalar i\u00e7in en iyi se\u00e7enektir. Ayr\u0131ca, MyISAM tablolar\u0131n\u0131 InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcrmek, i\u015flem deste\u011fi ve performans avantajlar\u0131 sa\u011flar. Bir sonraki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere!<\/p>","excerpt":"MySQL'de karakter setleri ve kar\u015f\u0131la\u015ft\u0131rma kurallar\u0131, veritaban\u0131nda metin verilerinin do\u011fru \u015fekilde saklanmas\u0131n\u0131 ve kar\u015f\u0131la\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. `utf8mb4`, modern uygulamalar i\u00e7in en iyi se\u00e7enektir. Ayr\u0131ca, MyISAM tablolar\u0131n\u0131 InnoDB'ye d\u00f6n\u00fc\u015ft\u00fcrmek, i\u015flem deste\u011fi ve performans avantajlar\u0131 sa\u011flar.","created_at":"2025-01-13 15:38:12","updated_at":"2026-09-07 00:55:33","category_id":9,"view_count":697,"reading_time":3,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:38:12","featured_image":"resimyok.jpg","slug":"sql-notlari-karakter-setleri-ve-karsilastirma-kurallari-collations","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}