Ezt az üzenetet kapom, ha a pathauto modullal a node alias-okat akarom legeneráltatni
("Node path settings" - "Bulk generate aliases for nodes that are not aliased")
user warning: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_hungarian_ci,IMPLICIT) for operation '=' query: SELECT n.nid, n.vid, n.type, n.title, n.uid, n.created, n.language, alias.src, alias.dst FROM node n LEFT JOIN url_alias alias ON CONCAT('node/', CAST(n.nid AS CHAR)) = alias.src WHERE alias.src IS NULL AND n.type IN ('story','page','glossary') LIMIT 0, 50 in /home/donci/old-stuff/WebApps/Drupal-sites/Fact-intezet/sites/all/modules/pathauto/pathauto_node.inc on line 101.
Az adatbázis utf8 és a default collation utf8_hungarian_ci. Ezt csak úgy sikerül elérnem, hogy: telepítem a drupalt, az létrehozza az adatbázist. Ezt dump-olom, és a tábla definiciókban lévő collationt (utf8_general_ci) cserélem utf8_hungarian_ci-re. Másképp nem megy.
Ha parancssoros mysql-el hozok létre egy táblát uft8_hungarian_ci-s adatbázisban, akkor az a tábla jól örökli a collation-t. Ha a php (drupal) hozza létre, akkor nem.
Közben, kinyírva néhány macskát, lefut a query. Ehhez a database.mysql.inc-ben a db_connect()-nél megadok néhány + értéket:
// Force UTF-8. //mysql_query('SET NAMES "utf8"', $connection); mysql_query('SET NAMES "utf8" collation "utf8_hungarian_ci"', $connection); mysql_query('SET character_set_client "utf8"', $connection); mysql_query('SET collation_connection "utf8_hungarian_ci"', $connection);
Ez még nem elég, csak ha settings.php-ben a kapcsolat típusát mysqli-ről mysql-re teszem.
Ekkor lefut az alias-ok generálása, nem kiabál az összeakadó collation-ökre (general sortlen 1, hungarian-nál 8). Ellenben az ékezetes karaktereket teljesen elfelejti, "fogalomtr/kdolsi-utasts" készít fogalomtar/kodolasi-utasitas helyett (ha general_ci, akkor megy, az i18n-ascii.txt beállítva, természetesen).
Jah, és ha mysql a connection, akkor minden admin oldalon az alábbi üzenet fogad:
warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/donci/old-stuff/WebApps/Drupal-sites/Fact-intezet/includes/theme.inc on line 930.
Mysqi kapcsolat esetén ez azonnal megszűnik.
Tehát, most van 2 nem működő megoldásom. Ha a szöveg magyar, akkor az utf8_general_ci-s adatbázis/táblák majdnem működnek. De nekem kellene a glossary view is, ami general_ci-nél nem tudja a magyar betűket. A probléma leírása itt: http://drupal.hu/forum/lexikon-szószedet
Ha jól számolom ez a 3 verzió, ami nem ok.
A mysql collation-ös probléma leírása itt: http://drupal.hu/forum/mysql-konfigurálása-megfelelő-collation-táblákban
Nem tudom eldönteni, mysql, php hiba, vagy egyszerűen csak én akarok túl sokat...
Valami ötlet? Hogyan lehetne megoldani ezeket a problémákat?
Most megpróbálom a kész, mysql adatbázist valahogy postgresql-esíteni. (bár ott meg már telepítés során is vannak gondok: http://drupal.hu/forum/magyar-nyelv-hozzáadás-hiba-postgresql-en)
(Egy egyszerű kis weblapot akarok ~ 50 oldal tartalom van fenn. Bizonyára a drupal beli tapasztalat hiánya is, hogy folyton ilyen falakba ütközöm...)
Egy lépéssel előrebb - sokkal hátra
Arra rájöttem menet közben:
hiába adom meg, hogy a tábla collation utf8_hungarian_ci, néhány mező (type, lang) utf8_general_ci lett. Ez csak a squirrel sql client-el tudtam kideríteni. A db-dump-ban mindenütt hungarian_ci van. Rejtély.
Átolvastam a fél mysql docs oldat (utálat vacak a doksi), és rájöttem. Ez az idióta mysql megint nem azt csinálja, mint amit kell. Ha a query-t egy részét átírom, akkor lefut:
A lényeg itt van cast(alias.src as char), vagyis az scr-t ami amugy is CHAR convertálom char típussá (van értelme, úgyamúgy?), akkor ez az idióta mysql, valamiféle kényszerből uft8_general_ci-t fog ráhúzni a konvertált típusra ebben a query-ben. Én nem tettem mást, csak a CAST(n.nid AS CHAR) formájára - ami utf8_general_ci szintén - hoztam az egyenlet második felét, így már össze tudja vetni a két értéket.
Gratulálok.
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
Megvan a megoldás
Az includes/database.mysqli.inc-be kell a következőt betenni
Tehát, a connection-t rá kell venni, hogy a megfelelő collation használatára.
Nem elegáns megoldás. Hogy kellen szebben? -> Új thread itt?: http://drupal.hu/forum/sql-kiadása-db-connect-után
thx!
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
A sorbarendezés miatt nem jó
A sorbarendezés miatt nem jó neked a general_ci ? Sajnos elegánsabb megoldást nem tudok, a másik thread-re sem, mivel ez elég mélyen van a drupalban ahhoz, hogy ne legyen hozzá hook.
Nem, nem jó
A glossary view a general-al nem tud magyar ékezeteket. Meg úgy általában a magyar szerinti sorbarendezés nem ok.
De megoldom, amint megtanulom programozni a drupalt... Addig jó ott ahol van, macskáknak annyi. :)
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok