Hangi harmanlama MySQL bu ülke adları saklamak için kullanmak gerekir?

2 Cevap php

Ben bir MySQL veritabanı ülkelerin bir listesini saklamak için çalışıyorum.

Ben bu gibi (İngilizce olmayan) isimler depolamak sorun yaşıyorum:

  • Sao Tome ve Principe
  • República de El Salvador

Onlar, db garip karakterler ile saklanır (ve dolayısıyla benim HTML sayfalarına garip çıkış) vardır.

Ben veritabanı ve MySQL bağlantı harmanlama için alfabe farklı kombinasyonları kullanarak denedi:

"Bariz" ayarı databse ve bağlantı bilgileri hem utf8_unicode_ci kullanımı idi. Benim mutlak sürpriz, bu sorunu çözmek değildi.

Herkes bu sorunu çözmek için nasıl biliyor mu?

[Edit]

Bu sorun harmanlama ile ilgisi olmayan çıkıyor, ama kodlama ziyade, col tarafından işaret olarak. Ben komut satırında, ben iki ayrı komutlar yazabilirsiniz fark:

SET NAMES utf8

followed by

[QUERY]

[SORGU] adlarını almak için benim SQL statment olduğunu ve nerede çalıştığını (isimler artık karıştırılmış vardır). Ben (yani kodu ile) programlama aynı şeyi yapmak Ancak, ben hala karıştırılmış isimleri olsun. Ben böyle iki ifadeyi birleştirerek çalıştı:

SET NAMES utf8; [QUERY]

Komut satırında, yine, bu doğru dizeleri döndü. Ben kodu ile aynı ifadeleri çalıştım kez daha, ben yanlış değerleri var.

Bu benim kod neye benzediğini bir parçası olduğunu:

$mysqli = self::get_db_connection();
$mysqli->query('SET NAMES utf8');

$sql = 'SELECT id, name FROM country';

$results = self::fetch($sql);

the fetch method is:

    private static function fetch($query)
    {
        $rows = array();

        if (!empty($query))
        {
            $mysqli = self::get_db_connection();

            if ($mysqli->connect_errno)
            {
                self::logError($mysqli->connect_error);
            }
            else
            {
                if ($result = $mysqli->query($query))
                {
                    if(is_object($result)){
                        while ($row = $result->fetch_array(MYSQLI_ASSOC))
                            $rows[] = $row;
                        $result->close();
                    }
                }
            }
        }
    return $rows;
    }

Herkes vericidir yanlış yapıyor olabilir ne nokta olabilir?

Just to clarify, the HTTP headers in the page are set correctly 'Content-type': 'text/html; charset=utf-8'

böylece sorun burada değil şu.

2 Cevap

As a matter of fact, collation affects nothing of a kind. it's a thing used for ordering and comparison, not recoding.
It is encoding responsible for the characters itself.

Yani, senin sorunun değil, tablo harmanlama ama bağlantı kodlama geliyor

SET NAMES utf8

sorgusu newly inserted data için açılacak en az, sorunu çözmek gerekir

Eğer * yerde UF8 kullanırsanız, bu iş olacak - Bir şey unuttum gibi görünüyor

* Her şu anlama gelir: for your database-collation and -connection, for your (php?) script files and for the pages that are sent to the browser (by setting a meta-tag or, better, set an uftf-8-header)