Latince aksanlı karakterleri (ã, õ, á, é, í,…) PHP / MySQL içindeki bir veritabanı tablosuna gönderme sorunları


3

Veritabanımdaki tabloyu Latin karakterlerinde göstermekte sorun yaşıyorum. (A, o A, E, í, ...). WAMP sunucusunu Apache 2.4.9 ve MySQL 5.6.17 ile kullanıyorum.

HTML'de oluşturduğum basit bir formum var ve bir PHP kodum var cadı bir sorgu çalıştırıyor ve hesap oluşturuyor. İşte PHP kodu:

include('config.php'); //My database data for connection

if(isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

    $query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
    $execute_query = mysqli_query($connection, $query);
    if($execute_query) { 
        //Creates the account
    }
    else { 
        //If an error occures
    }
}

Şimdi, örneğin, şöyle bir hesap oluşturuyorum:

Username: Luís
Password: 1234
E-mail: somemail@mail.com

Tabloyu kontrol ettiğimde oluşturduğum hesabı gösterir, ancak kullanıcı adı Luís yerine LuÃs gösterir .

Yaptığım şeyler:

Creating a DataBase and Table with:
utf8_general_ci
utf8_unicode_ci
utf8mb4_general_ci
utf8mb4_unicode_ci
latin1_swedish_ci

Hiçbiri işe yaramadı, her zaman í yerine à olduğunu gösteriyor .

Yanıtlar:


2

Sorunumu "SET NAMES utf8" sorgusuyla düzelttim.

include('config.php'); //My Database data for connection.
//Connection set with $connection = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db)

if(isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

    $connection->query("SET NAMES utf8"); //FIXED (Gets $connection from config.php and runs the query "SET NAMES utf8")
    $query = "INSERT INTO account SET username = '".$username."', password = PASSWORD('".$password."'), email = '".$email."'";
    $execute_query = mysqli_query($connection, $query);
    if($execute_query) { 
        //Creates the account
    }
    else { 
        //If an error occures
    }
}

Bana yardım etmeye çalıştığın için teşekkürler @JakeGould, sonuçta veritabanı tablomla hiçbir sorunum olmadı. Veritabanım ve tablom CHARSET = utf8 ve COLLATE = utf8_unicode_ci ile ayarlandı.


0

Sorunun kökü teşhisi.

Veritabanımdaki tabloyu Latin karakterlerinde göstermekte sorun yaşıyorum. (A, o A, E, í, ...)

Bu, HTML form verileriniz, PHP dosyası ve MySQL arasındaki kodlama uyumsuzluğunun tüm belirtilerine sahiptir. Benim tahminim mesele şu ki HTML formunuz ve PHP dosyası UTF8 veri gönderiyor - UTF8 bugünlerde varsayılan kodlama yöntemi latin1_swedish_ci.

Yani bu, HTML ve PHP dosyasındaki kodlamayı teorik olarak değiştirebileceğiniz "altıda biri, diğerine yarım düzine" meselesinden biridir latin1_swedish_ci. Ancak, bugünün İnternet dünyasında ve web geliştirme dünyasında oldukça gericidir.

Bu yüzden , tüm veri zincirinizin - HTML formundan PHP'ye, MySQL veritabanına - tüm UTF8 olduğundan emin olmanızı öneririm . UTF8’de her şeyi aldığınızda, bir çok sebepten dolayı hayat çok daha kolaydır.

Neden bu konuyu görüyorsanız, (varsayılan olarak) çoğu MySQL , yeni oluşturulan veritabanları latin1_swedish_ciyerine utf8_general_cikuruyor. Demek, bunu düzeltmek için doğru yoldasın.

Ancak, karakter kodlamasını ve bu durumda UTF8 kodlamasını uygun şekilde işlemek için ayarlanmış olan bir MySQL veritabanını ve dağıtım sunucusunu almak için yapmanız gereken birden fazla şey var.

Sorunu çözmek için atabileceğiniz adımlar.

İlk önce veritabanının harmanlamasını değiştirin ve tekrar deneyin.

ALTER DATABASE [name of your database] CHARACTER SET utf8;

Bu belirli bir tablo ise, harmanlama şu şekilde değiştirilebilir:

ALTER TABLE [name of your table] CONVERT TO CHARACTER SET utf8;

Ve eğer tablodaki belirli bir sütunsa:

ALTER TABLE [name of your table] MODIFY [name of your column] [other settings] CHARACTER SET utf8 COLLATE utf8_general_ci;

Belki mevcut veritabanını dışa aktarabilir, bu komutla yeni bir veritabanı oluşturabilir ve verileri yeniden alabilirsiniz:

CREATE DATABASE [name of your database] CHARACTER SET utf8 COLLATE utf8_general_ci;

Ve makinede MySQL kurulumunda kalıcı bir değişiklik yapmak istiyorsanız, size bir sorun yaşatır, gidin ve düzenleyin my.cnf. Aşağıdakiler tüm zinciri UTF-8 olarak ayarlayacaktır:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

1
latin1_swedish_ci??? neden varsayılan için ayarlanan İsveç kodunu seçtiler?
DavidPostill

@DavidPostill Elbette Yığın Taşması buna cevap veriyor . “
Yazan

Hiçbir şey çalışmadı. Sorguları koştum ve my.cnf'yi değiştirdim ama hiçbir şey olmadı. Belki de hesabı oluşturmak için çalıştırdığım sorguyla bir ilgisi vardır?
João Luís

@ JoãoLuís MySQL sunucusunu da yeniden başlattınız mı? Peki ya Apache? Apache'nin hangi sürümünü kullanıyorsunuz?
JakeGould

Önemsiz dersi için @JakeGould teşekkürler;) Ancak bağlantıya göre "? Onlar utf8_general_ci gibi aklı başında bir varsayılan içine bu ne değiştirdi, 20 yıl sonra bu büyük görmek güzel bir iş, MySQL."
DavidPostill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.