• 25-10-2023, 20:56:27
    #1
    Merhaba,

    Bir websitemizde Türkçe karakter sorunu yaşıyoruz.

    PHP sürümümüz 5.6 - Sistemden dolayı üst sürümlere geçiş imkanı yok.

    DBde kayıtlı verilerde ı,Ã,¼, ± gibi karakterler var. Biz ön tarafta gösterirken Türkçe formatta göstermek istiyoruz.

    Örnek : Uluslararası ÇaÄŸdaÅŸ EÄŸitim AraÅŸtırmaları
    Çıktısı : Uluslararası Çağdaş Eğitim Araştırmaları

    SQL bağlantısı mysql_connect ile olmalı. Sitedeki tüm işlemler buna bağlı. PDO vs. kullanamayız.

    Örnek sorgu:

    $ConnVeriTabani = mysql_connect($hostname_ConnVeriTabani, $username_ConnVeriTabani, $password_ConnVeriTabani) or trigger_error(mysql_error(),E_USER_ERROR);
    
    mysql_select_db($database_ConnVeriTabani, $ConnVeriTabani);
    $query_grupDetay = sprintf("SELECT * FROM x WHERE kisi_id = %s", GetSQLValueString($row_rsDetay['ID'], "int"));
    $grupRowDetay = mysql_query($query_grupDetay, $ConnVeriTabani) or die(mysql_error());
    $row_grupDetay = mysql_fetch_assoc($grupRowDetay);
    $totalRows_grupDetay = mysql_num_rows($grupRowDetay);
    MariaDB'de bu şekilde sorgu düzgün şekilde veriyi Türkçe olarak getiriyor. Fakat MySQL 8 sürümünde karakterler bozuk şekilde geliyor. Yani dbde kayıtlı olduğu şekilde geliyor.

    Birçok utf8 ve mysql replace fonksiyonları denedik fakat bir çözüm bulamadık.

    Dbde karakterleri convert etmeden, direkt Türkçe çıktı verecek şekilde işlem nasıl yapabilirim?

    Dediğim gibi MariaDB'de herhangi bir problem yok fakat MySQL 8 'de doğru şekilde Türkçe çıktı alamıyoruz. PHP'de fonksiyondan geçirip hatayı %99 oranda giderebiliyoruz fakat böyle bir çözüm istemiyoruz.

    Test etmek, denemek isteyenler olabilir diye örnek sql kayıtı paylaşıyorum.

    CREATE TABLE `test` (
    `id` int NOT NULL,
    `admin_id` int DEFAULT NULL,
    `hatirlatici_metin` mediumtext CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
    `tarih` date DEFAULT NULL,
    `durum` tinyint NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
    
    
    INSERT INTO `test` (`id`, `admin_id`, `hatirlatici_metin`, `tarih`, `durum`) VALUES
    (1, 171 'eşi  EVLİYAOĞLU ve oğlu  EVLİYAOĞLU\r\npasaportları   ayında başvuru yapacağını söyledi. Takip et\r\n', '2022-12-27', 0);
  • 27-11-2023, 00:29:23
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    hozcelik adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Bir websitemizde Türkçe karakter sorunu yaşıyoruz.

    PHP sürümümüz 5.6 - Sistemden dolayı üst sürümlere geçiş imkanı yok.

    DBde kayıtlı verilerde ı,Ã,¼, ± gibi karakterler var. Biz ön tarafta gösterirken Türkçe formatta göstermek istiyoruz.

    Örnek : Uluslararası ÇaÄŸdaÅŸ EÄŸitim AraÅŸtırmaları
    Çıktısı : Uluslararası Çağdaş Eğitim Araştırmaları

    SQL bağlantısı mysql_connect ile olmalı. Sitedeki tüm işlemler buna bağlı. PDO vs. kullanamayız.

    Örnek sorgu:

    $ConnVeriTabani = mysql_connect($hostname_ConnVeriTabani, $username_ConnVeriTabani, $password_ConnVeriTabani) or trigger_error(mysql_error(),E_USER_ERROR);
    
    mysql_select_db($database_ConnVeriTabani, $ConnVeriTabani);
    $query_grupDetay = sprintf("SELECT * FROM x WHERE kisi_id = %s", GetSQLValueString($row_rsDetay['ID'], "int"));
    $grupRowDetay = mysql_query($query_grupDetay, $ConnVeriTabani) or die(mysql_error());
    $row_grupDetay = mysql_fetch_assoc($grupRowDetay);
    $totalRows_grupDetay = mysql_num_rows($grupRowDetay);
    MariaDB'de bu şekilde sorgu düzgün şekilde veriyi Türkçe olarak getiriyor. Fakat MySQL 8 sürümünde karakterler bozuk şekilde geliyor. Yani dbde kayıtlı olduğu şekilde geliyor.

    Birçok utf8 ve mysql replace fonksiyonları denedik fakat bir çözüm bulamadık.

    Dbde karakterleri convert etmeden, direkt Türkçe çıktı verecek şekilde işlem nasıl yapabilirim?

    Dediğim gibi MariaDB'de herhangi bir problem yok fakat MySQL 8 'de doğru şekilde Türkçe çıktı alamıyoruz. PHP'de fonksiyondan geçirip hatayı %99 oranda giderebiliyoruz fakat böyle bir çözüm istemiyoruz.

    Test etmek, denemek isteyenler olabilir diye örnek sql kayıtı paylaşıyorum.

    CREATE TABLE `test` (
    `id` int NOT NULL,
    `admin_id` int DEFAULT NULL,
    `hatirlatici_metin` mediumtext CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
    `tarih` date DEFAULT NULL,
    `durum` tinyint NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
    
    
    INSERT INTO `test` (`id`, `admin_id`, `hatirlatici_metin`, `tarih`, `durum`) VALUES
    (1, 171 'eşi  EVLİYAOĞLU ve oğlu  EVLİYAOĞLU\r\npasaportları   ayında başvuru yapacağını söyledi. Takip et\r\n', '2022-12-27', 0);
    Selamlar.

    Şu şekilde dener misiniz?

    $ConnVeriTabani = mysql_connect($hostname_ConnVeriTabani, $username_ConnVeriTabani, $password_ConnVeriTabani) or trigger_error(mysql_error(),E_USER_ERROR);
    mysql_select_db($database_ConnVeriTabani, $ConnVeriTabani);
    
    // Karakter kodlamasını ayarla
    mysql_set_charset('utf8', $ConnVeriTabani);
    
    $query_grupDetay = sprintf("SELECT * FROM x WHERE kisi_id = %s", GetSQLValueString($row_rsDetay['ID'], "int"));
    $grupRowDetay = mysql_query($query_grupDetay, $ConnVeriTabani) or die(mysql_error());
    $row_grupDetay = mysql_fetch_assoc($grupRowDetay);
    $totalRows_grupDetay = mysql_num_rows($grupRowDetay);
  • 29-11-2023, 19:20:56
    #3
    Karakter bozulmasının bir çok sebebi olabilir. DBnin Charsetinden tutun, aktarım dosyasının karakter türüne kadar etkileyebilir.