Autor Zpráva
Petr1234
Profil *
Zdravím,

chci si z databáze vytáhnout první písmeno jmen. Použil jsem na to funkci substring(jmeno,1,1). Funguje bezvadně, ale bohužel neřeší české znaky. Jako kdyby tam ani takové záznamy nebyli.

D9ky za radu
nightfish
Profil
pokud používáš utf-8, tak mb_substr

EDIT: chyba, nepodíval jsem se, že je dotaz v databázích, ne v PHP

jinak co se substringu v mysql týká, tak
This function is multi-byte safe.
neboli i s utf-8 by to mělo fungovat bez problémů (pokud ovšem mysql ví, že data jsou v utf-8)
igamenir
Profil
zdravím, mám podobný - vytáhnu si jako ukázku textu prvních 200 znaků, ale vytahuje kratší texty a občas se stane, že vytáhne pouze polovinu znaku posledního znaku... a že to je v utf8 ví určitě protože to má nastavena jak databáze, tak tabulka, tak sloupec, tak i php .... prostě všude v tom dělám.
Je nějaké jiné řešení než vytáhnout dvojnásobek znaků a pak to oříznout v php přes mb_substr ?
dík
Kajman_
Profil *
A máte stabilní verzi mysql?
nightfish
Profil
vytáhnu si jako ukázku textu prvních 200 znaků
pomocí substring() v mysql? pokud ano, tak není důvod, aby to nefungovalo
igamenir
Profil
přes mysql, když jsme v sekci pro databáze, ale když jsem zkoušel vytáhnout víc a v php to oříznout na požadovaný pořčet, tak to dělá stejnou chybu, ať už se substr nebo mb_substr.

ale na radu kamaráda jsem zavedl v php přes strrpos ořezávání k poslední mezeře, čímž se zbavím nejen půlznaků ale i půlslov a vypadá to líp - doporučuji.
nicméně by mne zajímalo čím to asi je.
nightfish
Profil
napadají mě snad jenom špatně nastavené collations připojení/databáze/tabulky/sloupce
heptau
Profil *
V PHP bude asi potreba nastavit nasledujici:
mb_regex_encoding("utf-8");
mb_internal_encoding("utf-8");

V MySQL netusim - pouzivat Postgres a tam jsem nic nastavovat nemusel.
studiob
Profil
Díky, přesně to mi pomohlo. Použil jsem toto:

mb_regex_encoding("utf-8");
mb_internal_encoding("utf-8");

mb_substr($input, 0, $length);

Bez použití nastavení UTF se mb_substr chová s češtinou stejně (blbě) jako substr.
Tori
Profil
studiob:
Bez použití nastavení UTF se mb_substr chová s češtinou stejně (blbě) jako substr.
Knihovna mbstring používá jako výchozí kódování Latin1 (je to napsané někde v manuálu), takže odlišné kódování se buď musí zadat při každém volání funkce: mb_substr($input, 0, $length, 'UTF-8');, anebo nastavit pro celý skript (buď funkcí mb_internal_encoding nebo v php.ini).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: