MySQL SET İSİMLERİ utf8?

6 Cevap php

Ben sık sık MySQL PHP kullanarak komut aşağıda buna benzer bir şey görmek

query("SET NAMES utf8");   

Ben herhangi bir proje için bunu yapmak yoktu ama bu yüzden bunun hakkında bir kaç temel sorular var.

  1. Bu sadece PDO ile yapılan bir şeydir?
  2. Bir PDO belirli bir şey değilse, o zaman bunu yapmanın amacı nedir? Ben mysql için kodlamayı ayardır farkında ama Yani, öyleyse neden bunu kullanmak isteyeyim kullanmak yoktu?

6 Cevap

Eğer sunucu 'ñ' veya 'ö' gibi saf ASCII temsil edilemeyecek karakterlere sahip veri göndermek istediğinizde bu gereklidir.

Bu MySQL örneği (pek çok yere ve platform bağlı bulunmaktadır.) Istemci bağlantıları varsayılan olarak UTF-8 kodlamasını beklemek üzere yapılandırılmış değilse

http://www.joelonsoftware.com/articles/Unicode.html durumda Unicode nasıl çalıştığını farkında değildir okuyun.

Oku http://stackoverflow.com/questions/1650591/whether-to-use-set-names SET İSİMLERİ alternatifleri görmek ve tam olarak ne hakkında olduğunu.

Kimden manual:

SET NAMES indicates what character set the client will use to send SQL statements to the server.

Daha özenle, (ve bir kez daha, nedensizce manual kaldırıldığında):

SET NAMES indicates what character set the client will use to send SQL statements to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming messages from this client are in character set cp1251.” It also specifies the character set that the server should use for sending results back to the client. (For example, it indicates what character set to use for column values if you use a SELECT statement.)

Hakkı kodlayan Başlarken gerçekten zor - çok fazla katmanı vardır:

  • Tarayıcı
  • Sayfa
  • PHP
  • MySQL

PHP SQL komutu "SET CHARSET utf8" istemci tarafı (PHP) olursa olsun veritabanında saklanır, nasıl UTF8 verileri almak sağlayacaktır. Tabii ki, onlar ilk doğru muhafaza edilmesi gerekir.

DDL definition vs. real data

Bir tablo / sütun için tanımlanan kodlama gerçekten veriler kodlama olduğu anlamına gelmez. Eğer bir tablo utf8 olarak tanımlanan ancak differtent kodlama gibi saklanan sahip olsaydı, o zaman MySQL utf8 olarak onları tedavi edecek ve belada. Hangi ilk önce bu düzeltmek zorunda kalıyoruz.

What to check

Her katmanda veri akışını kodlayan ne kontrol etmeniz gerekir.

  • HTTP başlıkları, başlıklarını kontrol edin.
  • Gerçekten istek gövdesinde gönderilir neler edin.
  • Don't forget that MySQL has encoding almost everywhere:
    • Veritabanı
    • Tablolar
    • Sütunlar
    • Bir bütün olarak sunucu
    • Client
      Make sure that there's the right one everywhere.

Conversion

Eğer örneğin veri alırsanız windows-1250, ve utf-8 saklamak istiyorum, sonra saklamadan önce bu SQL kullanın:

SET NAMES 'cp1250';

Eğer windows-1250 olarak DB veri var ve utf8 kullanımını retreive istiyorsanız:

SET CHARSET 'utf8';

Last note:

Verileri göstermek için çok "akıllı" araçlar güvenmeyin. Örneğin phpMyAdmin gerçekten kötü kodlayan (ben bunu kullanarak zaman yaptığını) yapar. Ve bu yüzden bulmak zor tüm katmanları üzerinden geçer. Ayrıca, Internet Explorer garip kurallara dayalı kodlama "tahmin" gerçekten aptalca bir davranışı vardı. Eğer kodlama geçiş basit editörleri kullanmak. Ayrıca, MySQL Workbench öneririz.

Bu sorgu veritabanındaki veya güncelleştirme verileri oluşturmak sorgu önce yazılmış olmalıdır, bu sorgu gibi görünüyor:

mysql_query("set names 'utf8'");

Eğer başlığında böyle eklemek utf-8 kullanıyorsanız ya da Internet Explorer ile ilgili bir sorun couse eğer örneğin başlığında kullandığınız kodlar yazmak gerektiğini unutmayın

böylece sayfa, bu gibi görünüyor

<html>
    <head>
        <title>page title</title>
        <meta charset="UTF-8" />   
    </head>
    <body>
    <?php
            mysql_query("set names 'utf8'");   
            $sql = "INSERT * FROM ..... ";  
            mysql_query($sql);
    ?>    

    </body>
<html>

Tüm teşekkürler @!

kullanmayın: sorgu ("İsimler utf8 SET"); Bu kurulum şeyler ve bir sorgu. ) sağ setCharset (ile bir bağlantı başlangıç ​​nere koymak (veya benzer bir yöntem)

parctice bazı küçük şey:

durum:

  • Varsayılan görüşmeler ile mysql sunucu latin1
  • senin delik app utf8 olduğunu
  • Bağlantı herhangi bir ekstra olmadan yapılır (yani: latin1) (hayır SET İSİMLERİ utf8 ..., hayır set_charset () metodu / fonksiyon)

Store and read data is no problem as long mysql can handle the characters. if you look in the db you will already see there is crap in it (e.g.using phpmyadmin).

Şimdiye kadar bu bir sorun değil! (Yanlış ama) avrupa (genellikle çalışır) ..

.. Doğru çalışan başka bir istemci / programm veya değiştirilen bir kütüphane, okuma sürece / verileri kaydetmek. o zaman büyük belada!

Instead of doing this via an SQL query use the php function: mysqli::set_charset mysqli_set_charset

Note:

This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended.

Daha fazla bilgi için MySQL karakter seti kavramlar bölümüne bakın.

dan http://www.php.net/manual/en/mysqli.set-charset.php