W Mysql lepiej używać do typów tekstowych char czy varchar?
compare |
char
| varchar
---------------- | ---------------- | ----------------
`length?` | `fixed` | `variable`
`max?` |
```sql
255
|
65 535
`memory allocation`? |
```sql
static
|
dynamic
+char jest 50% szybszy od varchar
<sup> `MySQL 5.0.3+` trzyma do `65,535` znaków</sup>
teoretycznie lepiej varchar, ale czy tak jest w praktyce?
bo przy varchar jak się nie wykorzysta tyle znaków ile zadeklarowaliśmy to miejsce te w pamięci nie jest rezerwowane tak jak w przypadku typu char.
spartanPAGE napisał(a):
+char jest 50% szybszy od varchar
ale w czym jest szybszy? W parzeniu kawy? Bo przecież nie mówimy o porównywaniu czy też odczycie. Może być szybszy ale o kilka, kilkanaście procent a nie o 50%.
Trzeba też wziąć pod uwagę, że w skrajnych przypadkach po pierwsze może być nieużywalny - np. w kolumnie Char(20)
nie zapiszesz ciągu typu ABCD
ponieważ informacja o ostatnich spacjach zostanie zgubiona. Po drugie jeśli, jak to jest często przy typie VARCHAR, dasz rozmiar "na wyrost" (np. 'ulica CHAR(100)`) i będziesz tam miał stosunkowo małe ciągi znaków to po pierwsze zmarnujesz mnóstwo miejsca (w stosunku do VARCHAR) a po drugie możesz sobie pogorszyć wyszukiwanie po tej kolumnie (indeks założony na polu typu CHAR musi przechowywać informację o całym polu nawet jeśli 90% to spacje) - po prostu indeks dla pola CHAR będzie zajmował więcej stron w pamięci i potrzebował więcej odczytów.
Pola typu CHAR mają sens dla wartości o stałej długości - PESEL, NIP, kod pocztowy, T/N. Natomiast tracą sens przy wartościach, których rozmiar znacznie się wacha