Diakritika v názvu sloupců tabulky

dj.kure
Člen | 70
+
0
-

Ahoj,

využívám databáze RUIAN pro jednoznačnou identifikaci adres / objektů.
Bohužel má databáze v názvu sloupců tabulky diakritiku a na to nemůžu sáhnout, protože totožnou tabulku využívá více aplikací.

Můj dotaz v SQL zní takto:

SELECT `Kód ADM` AS `adm`
FROM `RUIAN`
WHERE ((`Název ulice` = 'Hlavní' OR `Název části obce` = 'Hlavní') AND
(`Číslo orientační` = '50' OR `Číslo domovní` = '50') AND `PSČ` = '32300')
LIMIT 1

Ale Nette mi z něj vytvoří toto:

SELECT `Kó`d` ADM` AS `adm`
FROM `RUIAN`
WHERE ((`Ná`zev` ulice` = 'Hlavní' OR `Ná`zev` čá`sti` obce` = 'Hlavní') AND
(`Čí`slo` `orienta`č`n`í` = '50' OR `Čí`slo` `domovn`í` = '50') AND `PSČ` = '32300')
LIMIT 1

Vůnec nevím, jak to vyřešit. Zkoušel jsem to dávat do různých typů uvozovek, všemožně to eskejpovat… a výsledek stále stejný :-( s názvy sloupců nehnu, takže jestli MySQL neumí třeba zástupné označení (něco jako col1, col2, col3, …), tak jsem v pytli.

Projekt je psaný v UTF-8, tabulky jsou ve formátu Windows-1250.

chemix
Nette Core | 1296
+
+6
-

😳

dj.kure
Člen | 70
+
0
-

Ještě doplním toto:

$this->vypisRuianu()->select("`Kód ADM` AS `adm`")->where("(`Název ulice` = ? OR `Název části obce` = ?) AND (`Číslo orientační` = ? OR `Číslo domovní` = ?) AND `PSČ` = ?", $ulice, $ulice, $cp, $cp, $psc)->limit(1)->fetch();

Třeba to řekne více.

neznamy_uzivatel
Člen | 115
+
0
-

Dělá to funkce tryDelimite() z \Nette\Database\Table\SqlBuilder
Jak to správně přepsat a nehrabat do vendor nemám tušení :)

Každopádně česká diakritika v názvech tabulek (tohle vypadá imporotvané z toho jejich csv) zcela přesně odpovída stavu ve státním IT.. Smutné.

Editoval neznamy_uzivatel (16. 3. 2019 8:26)

dj.kure
Člen | 70
+
0
-

Máš pravdu, provedl jsem jen import CSV z DB RUIANu :( zatím to řeším externím požadavkem (GET) a kombinací funkcí

file_get_contents(/externí-page-mimo-nette/);
json_en/decode();

Ale je to samozřejmě o mnoho pomalejší. Na druhou stranu mi to tolik nevadí, protože se to spouští jen v noci CRONem a v malém počtu.

h4kuna
Backer | 740
+
0
-

Od tohoto wtf by tě mohlo odstínit view, které je také updateable a myslím že mysql to také umí.

CREATE VIEW ruian_view AS
SELECT `Kód ADM` AS `code_adm` FROM `RUIAN`;

A používej právě nově vzniklé view s anglickými názvy sloupců.

Editoval h4kuna (17. 3. 2019 4:48)