Zend Framework + hosszú karakterek sql-ben
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:
Í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.
■ 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);
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.
csak gyorsan
Van beépített PDO adapter, használd azt. Valamint kapsz tőlem ajándékba néhány sort az application.ini-be:
db karakterkódolása?
Lehet, hogy tévedek, de mintha alapból latin1 lenne, és abban a karakterkészletben "ő" és "ű" nincsen tényleg.
Elfelejtettem leírni, de
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:
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:
Köszi a válaszokat, próbálkozok tovább.
Minden UTF-8
Content-Type
fejlécedmind 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.
Re
Köszi a segítséget!