ugrás a tartalomhoz

Zend Framework + hosszú karakterek sql-ben

Tozo · 2009. Dec. 24. (Cs), 19.53
Sziasztok

Remélem a megfelelő helyre írok :)

A problémám a következő:
Zend Frameworkot használok, de még elég kezdő vagyok benne. A projektemben egy a gépemen futó adatbázishoz kapcsolódok és onnan adatokat kapok, illetve oda küldök. Eddig amikor beírtam valami magyar ékezettel bíró szöveget, pl "termékek", akkor ebben a formában tárolódott el az adatbázisban: "TERMÉKEK". Ez kicsit zavart az elején, de mivel gond nélkül tudtam kiolvasni így is az ékezetes betűket hagytam a dolgot. Most hogy egy újabb projektet kezdek, gondoltam megpróbálom normálisan lekódolni a cuccost. Keresgéltem a neten és ezt találtam:

class DbAdapter_Pdo_Mysql extends Zend_Db_Adapter_Mysqli {

   protected function _connect() {
       if ($this->_connection)
            return;

        parent::_connect();

        $this->query('SET NAMES utf8');
        $this->query('SET CHARACTER SET utf8');
    }
}

$dbAdapter = new DbAdapter_Pdo_Mysql(array(
             'host' => 'localhost',
             'username' => 'root',
             'password' => '12345',
             'dbname' => 'valami'
             ));

$registry->set('MYSQLI', $dbAdapter);

Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);


Így szinte kivétel nélkül az összes ékezetes betűt ugyanolyan formában tárolom le, mint ahogy meg is jelenik az oldalon, kivéve két betűt: "ő", "ű". Ezek helyett csak egy egyszerű "?" jelenik meg. Akárhogy próbálkoztam nem jutottam megoldásra. Ha esetleg lenne egy Zend guru aki segítene, azt nagyon megköszönném.

Haliho.
 
1

csak gyorsan

erenon · 2009. Dec. 24. (Cs), 20.23
Bocs a címszavakért, sajnos így érek most rá:
Van beépített PDO adapter, használd azt. Valamint kapsz tőlem ajándékba néhány sort az application.ini-be:
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.charset = "utf8"
resources.db.isDefaultTableAdapter = true

resources.db.params.username = "*"
resources.db.params.password = "*"
resources.db.params.dbname = "*"
2

db karakterkódolása?

krisy · 2009. Dec. 24. (Cs), 22.40
Ha jól látom, MySQL-t használsz, ugye? Mi az adatbázis/táblák/mezők karakterkódolása?
Lehet, hogy tévedek, de mintha alapból latin1 lenne, és abban a karakterkészletben "ő" és "ű" nincsen tényleg.
3

Elfelejtettem leírni, de

Tozo · 2009. Dec. 24. (Cs), 23.39
Elfelejtettem leírni, de következő beállításokkal bír a tábla:
Charset: utf8
Collation: próbáltam utf8_general_ci-vel és utf8_hungarian_ci-vel is, ugyanaz volt az eredmény.

@erenon: Megpróbáltam amit írtál, de valamiért még nem működik. A következő hibát dobta:
An exception occured while bootstrapping the application.

Adapter name must be specified in a string
Stack Trace:

#0 C:\web\web\enger\application\bootstrap.php(79): Zend_Db::factory(NULL)
#1 C:\web\web\enger\public\index.php(28): require('C:\web\web\enge...')
#2 {main}


A bootstrap fájl 79. sorában pedig ez van:
$dbAdapter = Zend_Db::factory($configuration->database);


Köszi a válaszokat, próbálkozok tovább.
4

Minden UTF-8

Joó Ádám · 2009. Dec. 25. (P), 15.28
Ez nem ZF probléma. Ellenőrizd le, hogy

  • az adatbázisod
  • a tábláid
  • a mezőid
  • a PHP, HTML és egyéb fájljaid
  • a HTTP Content-Type fejléced


mind UTF-8 legyen. A minden az azt jelenti, hogy tényleg minden. Nekem ennyi elég szokott lenni hozzá, hogy semmilyen gondom ne akadjon, ha ezek után is problémás, akkor még érdemes megnézni a SET NAMES-t.

Viszont: azt írod, hogy az oldalon jól jelenik meg az adat, ebből arra következtetek, hogy ahol nem, az a phpMyAdmin. Na ez az, amit egész nyugodtan hagyj figyelmen kívül, ahogy láttam, valahol menet közben nem veszi észre, hogy UTF-8-ról van szó, és a kétbájtos karaktert két karakterként jeleníti meg. A parancssori MySQL konzol hiba nélkül ad vissza mindent.
5

Re

Tozo · 2009. Dec. 27. (V), 11.41
Bocsánat, az elmúlt napokban nem tudtam a feladattal foglalkozni. Mivel nem vagyok nagy guru, ezért MySQL Query Browserben hoztam létre és kezeltem a táblákat, de a mezők kódolását nem tudtam módosítani ott. Letöltöttem a Workbenchet és itt már sikerült beállítani, aminek hatására a táblában is tökéletesen olvashatóan vannak eltárolva az adatok, illetve az oldalon is jól jelenik meg minden.
Köszi a segítséget!