Pokud databázový server MariaDB nebo MySQL nedovolí vložit nový záznam do tabulky kvůli chybě „Field ‚column_name‘ doesn’t have a default value“ (Error 1364), znamená to, že máte nastavený přísný režim SQL (STRICT_TRANS_TABLES).
MySQL/MariaDB: Jaký je rozdíl mezi INNER JOIN, LEFT JOIN a RIGHT JOIN? Tady je úžasná vizualizace!
Rozdíl mezi jednotlivými typy spojení tabulek je obrovský, protože vám vrátí odlišné záznamy. Nejčastěji se můžete setkat s INNER JOIN a LEFT JOIN, využívané jsou také RIGHT JOIN a OUTER JOIN, ale existují i složitější konstrukce LEFT JOIN EXCLUDING INNER JOIN, RIGHT JOIN EXCLUDING INNER JOIN a OUTER JOIN EXCLUDING INNER JOIN.
Jejich pochopení vám ulehčí následující vizualizace. A když ještě správně nastavíte indexy, databázový server vás bude zbožňovat.
Transakce v MySQL a PHP: Pokud nezavoláte rollback, máte zaděláno na pořádný průšvih
Při práci s transakcemi v MySQL se občas můžeme zamotat do jejich volání. START TRANSACTION považujme za párový příkaz, po kterém by mělo být vždy zavoláno COMMIT nebo ROLLBACK. Jinak máte zaděláno na velký problém.
Jakub Vrána: Deploy ve Facebooku a nasazování funkcí mezi uživatele
Zajímavá přednáška Jakuba Vrány, tehdy ještě zaměstnance Facebooku, jak se pracuje ve Facebooku s preparables, mcproxy a XHP. Rozpovídal se také o deployi a způsobu nasazování jednotlivých funkcí mezi uživatele.
Jak naimportovat hodně velký SQL dump do MySQL?
Třeba pomocí BigDump: Staggered MySQL Dump Importer.
Užitečné on-line nástroje pro webové vývojáře
Výkon webu
https://developers.google.com/pagespeed/
Gzip komprese
http://nontroppo.org/tools/gziptest/
DNS, A, MX, TTL aj.
Read More
V čem upravovat velké textové SQL dump soubory? (edit big files)
Editace a prohlížení velkých textových souborů (1 GB+) není žádná legrace. Představte si, že máte před sebou textový soubor s SQL dumpem databáze a potřebujete v něm pod Windows něco upravit.
Jestli je soubor v řádu jednotek nebo maximálně desítek megabytů, můžete zkusit český PSPad (v 4.5.6) nebo lépe Notepad++ (v 5.9.6.2).
Pokud ale musíte pracovat s dumpy, které mají stovky megabytů nebo jednotky gigabytů, rovnou na výše dva zmíněné programy zapomeňte. Potřeboval jsem pracovat s dumpem o velikosti cca 700 MB a ani jeden si s ním neporadil (ne že bych čekal něco jiného).
UTF-8, MySQL, kódování a PHP funkce pro práci s řetězci: strlen, substr aj.
Možná jste při práci s PHP narazili na problém s UTF-8 kódováním. Doposud jste využívali kódování cp1250 nebo iso-8859-2 a nebyl problém. Okolnosti vás přinutily požívat UTF-8 a najednou bum. Na stránkách se vám chybně vypisují znaky s českou diakritikou a nevíte co s tím.
Jak správně použít UTF-8 a MySQL?
Je třeba dodržet následující pravidla:
- Po připojení nastavit kódování, ve kterém bude probíhat komunikace s databázovým serverem:
mysql_query("SET NAMES 'utf8'"); nebo mysql_query('SET CHARACTER SET utf8'); Od PHP 5.2.3 a MySQL 5.0.7 raději použijte: mysql_set_charset('utf8'); Je to správná a bezpečná varianta pro použití mysql_real_escape_string(). Více: 1, 2, 3.
- Kódování PHP souborů nastavit na UTF-8 (pozor na počáteční UTF-8 boom znak)
- Odesílat hlavičky s UTF-8 kódováním:
header('Content-Type: text/html; charset=utf-8');
- Nastavit UTF-8 kódování v HTML (meta tagy, xml hlavička aj.)
- Používat PHP řetězcové funkce, které zvládají UTF-8 (viz dále)
Read More
MySQL: Rychlost UPDATE sloupce v závislosti na přítomnosti indexů
Nedávno jsme s Lukášem Churým a Ondrou Vašíčkem řešili rychlost operace UPDATE v závislosti na tom, jestli upravovaný sloupec má či nemá nastavený index.
Představte si, že máme v MySQL 5.0 tabulku o několika sloupcích, dva z nich jsou „id“ a „xy“. Nad sloupcem „id“ je přidělený index. Sloupec „xy“ index nemá. Rychlost UPDATE sloupce „xy“ trvá nějaký čas.
Otázka zní, jestli UPDATE zabere stejný čas i v případě, kdyby sloupec „xy“ měl přidělený index.
Udělal jsem jednoduchý test, který přináší odpověď.
Jak na to: SQL injection, magic_quotes_gpc, addslashes() a stripslashes()
V názvu článku jsem vyjmenoval slova, která jsou strašákem nejednoho PHP programátora. Strašák to je ale pouze uměle vytvořený, vycházející z neznalosti problematiky.
Dost často se ve spojení s SQL injection (typ útoku hackera) zmiňuje PHP konstanta magic_quotes_gpc. Prý, že pokud je zapnutá, tak se dá SQL injection předejít. A víte, že od PHP 5.3 bude standardně magic_quotes_gpc vypnutá?
Znamená to, že poté budou SQL dotazy napadnutelné pomocí SQL injection? Ale vůbec ne.
Konstanta magic_quotes_gpc totiž s ochranou SQL injection nemá v podstatě nic společného. Pouze zde existuje průsečík v možnosti jejího využití. Proto ji neznalí programátoři začali přisuzovat větší váhu, než má. Váha magic_quotes_gpc je samozřejmě nulová, zvláštně, když od PHP 5.3 bude vypnutá a v PHP 6 zanikne úplně.
Vysvětleme si tedy, oč jde. SQL injection je vážný problém.