Autor | Zpráva | ||
---|---|---|---|
Vorel Profil * |
#1 · Zasláno: 27. 2. 2014, 10:37:27
Jaký datový typ je nejvhodnější použít pro řetězec?
Není nejlepší použít datový typ TEXT? Nebo podle čeho se řídit při výběru konkrétního typu (TEXT,CHAR,VARCHAR,NCHAR,...)? |
||
juriad Profil |
#2 · Zasláno: 27. 2. 2014, 10:47:38
CHAR = pevně dlouhý text; zabírá vždy přesně takové místo, je rychlý; vhodný je pro máloznakové texty (ANO/NE, Y/N)
VARCHAR = text s proměnlivou délkou; má horní limit, je rychlý při zpracování (je uložen přímo v řádku tabulky, lze ho indexovat); hodí se na většinu textů u kterých můžeš garantovat jejich maximální velikost (jména, titulky, typy) TEXT = skoro neomezený text; je umožen mimo řádek tabulky, takže práce s ním je pomalejší. Hodí se třeba na texty článků, záznamy logů atp. N*** = varianta předchozích, které mohou obsahovat libovolný znak z Unicode na úkor velikosti. Obyčejné (ty nezačínající na N) mohou obsahovat jen znaky v takovém kódování, které uvedeš při jejich definici. Toliko obecně. SQLite je ale speciální databáze, ta má jediný ultimátní řetězcový typ. V SQLite tedy typy moc řešit nemusíš. TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE). http://www.sqlite.org/datatype3.html Je to z důvodu jednoduchosti; SQLite není určena do prostředí, které vyžaduje vysoký výkon. |
||
Vorel Profil * |
#3 · Zasláno: 27. 2. 2014, 15:52:16
OK.
Takže, když budu ukládat záznam např. o délce 0-30 znaků použiji VARCHAR a musím u tohoto typu definovat max. délku (tzn.Size=30)? |
||
juriad Profil |
#4 · Zasláno: 27. 2. 2014, 16:05:38
Speciálně u SQLite ti stačí uvést jen jeden z INTEGER (celé číslo), REAL (desetinné číslo), TEXT (text), BLOB (binární data).
Ať uvedeš kterýkoli z: CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB |
||
Vorel Profil * |
#5 · Zasláno: 27. 2. 2014, 16:19:04
Aha,
VARCHAR tedy použiju např. pro jména, emaily, adresy, atd... TEXT pro články, zprávy, atd... s dalším se nemá cenu zaobírat a udávat max. délku je také zbytečné. Je to tak? |
||
juriad Profil |
#6 · Zasláno: 27. 2. 2014, 16:35:54
Znovu. U SQLite se tím vůbec nemá smysl zabývat. SQLite má jediný řetězcový typ TEXT. Dovolí ti sice zapsat i jiné výše zmíněné, ale mají stejný význam, jako by to byl TEXT.
Ano, pro jiné databáze než SQLite jsi příklady uvedl dobře. U těch databází záleží na délce, kterou uvedeš. Délka u CHAR - značí počet použitých znaků. Pokud vložíš více, doplní se zprava mezerami (záleží na databázi, alespoň myslím). Pokud vložíš více, text se ořízne. Délka u VARCHAT - značí maximální počet znaků. Pokud vložíš méně, nic se neděje. Pokud vložíš více, text se ořízne. Délka u TEXT - je irelevantní, neuvádí se. Databáze může nabídnout různé rozsahy TEXTů jako samotné typy: LONG TEXT, SHORT TEXT atp. VARCHAR a TEXT zaberou přesně místo odpovídající počtu znaků + pár bytů na uložení použité délky. CHAR zabere vždy celé vyhrazené místo, nepotřebuje ukládat použitou délku. Varianty s N nazačátku zaberou přibližně dvakrát více místa, záleží však na databázi, jak ukládá Unicode. |
||
Časová prodleva: 10 let
|
0