Fórum Root.cz
Hlavní témata => Server => Téma založeno: acerimmer 22. 03. 2023, 14:58:38
-
V DB (Postgres) mam tabulku se sloupeckem typu 'text'. Ve sloupecku ukladam 'nahodny' text, kazda radka tabulky ma ruzny obsah tohoto sloupecku. Chci zjistit velikost daneho 'text' sloupecku v bytech pro vsechny radky. Funkce length() mi vrati u sloupecku typu 'text' pocet znaku, ja ale chci vedet kolik pameti znaky zabiraji. Muzu predpokladat ze 1 znak je priblizne 1 byte nebo je to treba prepocitat? A je na toto nejaka standardni funkce v Postgresu? Doufam ze to neni blby dotaz, ale nedari se mi nic najit.
-
Záleží na kódování znaků. Existují jednobajtová kódování znaků, jde jeden znak = jeden bajt – třeba ISO-859-2, Windows-1250 (pro české texty), ISO-8859-1 (pro západoevropsé jazyky). Existují kódování, kde jeden znak = jeden až čtyři bajty – třeba kódování UTF-8. Znaky anglické abecedy jsou dlouhé 1 bajt, české znaky s diakritikou jsou dvoubajtové, nějaké emoji znaky mohou mít čtyř bajty. Jsou kódování, kde jeden znak jsou vždy dva bajty – třeba UCS-2, do kterého ale nejde uložit plný Unicode, jenom jeho podmnožina (ve které ale jsou všechny české znaky).
Délku textu v bajtech vrací funkce octet_length(). Počítá délku textu v kódování serveru (což je asi to, co chcete).
-
Ještě by tě mohlo zajímat pg_column_size - vrátí skutečnou velikost, kterou DB potřebuje k uložení dané hodnoty.
-
Nechapu jak jsem mohl octet_length prehlednout, diky 8)