Portál AbcLinuxu, 7. května 2025 17:11
Řešení dotazu:
"SELECT popis FROM....WHERE popis NOT REGEXP 'UKON\xc4\x8cENA|VY\xc5\x98AZENO|NEDOD\xc3\x81V\xc3\x81|STA\xc5\xbdENO Z|NEN\xc3\x8d V NAB\xc3\x8dDCE|NEN\xc3\x8d K DISPOZICI'"Ideální je samozřejmě mít to ve stejným kódování jako db, ale není to podmínka – konverze není těžká pokud víš kodování zdroje. BTW celý je to padlý, používat češtinu v číselníkových sloupcích je složitější a pokud nehovíš práci s collation a kódováním sloupců tak bys to neměl dělat. A zahoď ten regex a použij místo toho NOT IN klauzuli, tím se nepřipravíš o indexy.
…WHERE popis NOT IN ('foo','bar','baz')Uvnitř IN může být i subselect který ti třeba překlopí lidské názvy na něco rozumnějšího.
…WHERE popis NOT IN ( SELECT id FROM foo WHERE … )Přitom to může fungovat rychle i nad velkými daty když tam hodíš index. A když nadefinuješ cizí klíč tak máš i zajištěnou referenční integritu. LIKE a REGEX použití indexu víceméně vylučují, takže každý dotaz pojede fullscan přes celou tabuli. Někdy se tomu nedá vyhnout, ale podle názvů v tom tvém dotazu soudím že by tam čísleník patřil.
SET NAMES kódování
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.