utf8
MySQL kódování není skutečné UTF-8. Je to kódování, které je trochu jako UTF-8, ale podporuje pouze podmnožinu toho, co podporuje UTF-8. utf8mb4
je skutečný UTF-8. Tento rozdíl je podrobností interní implementace MySQL. Oba vypadají na straně PHP jako UTF-8. Ať už používáte utf8
nebo utf8mb4
, PHP získá platné UTF-8 v obou případech.
Musíte se ujistit, že kódování připojení mezi PHP a MySQL je nastaven na utf8mb4
. Pokud je nastaveno na utf8
, MySQL nebude podporovat všechny znaky. Toto kódování připojení nastavíte pomocí mysql_set_charset()
, charset
PDO Parametr připojení DSN nebo jakákoli jiná metoda vhodná pro vámi zvolené rozhraní API databáze.
mb_internal_encoding
pouze nastaví výchozí hodnotu pro $encoding
parametr all mb_*
funkce mají. Nemá to nic společného s MySQL.
UTF-8 a UTF-32 se liší v tom, jak kódují znaky. UTF-8 používá minimum 1 bajt pro znak a maximálně 4. UTF-32 vždy používá 4 bajty pro každý znak. UTF-16 používá minimálně 2 bajty a maximálně 4.
Kvůli své proměnlivé délce má UTF-8 trochu režii. Znak, který může být zakódován do 2 bajtů v UTF-16, může trvat 3 nebo 4 v UTF-8; na druhou stranu UTF-16 nikdy nepoužívá méně než 2 bajty. Pokud ukládáte hodně asijského textu, může UTF-16 zabrat méně místa. Pokud je většina vašeho textu angličtina/ASCII, UTF-8 zabere méně místa. UTF-32 vždy využívá nejvíce úložiště.