char czy varchar?

0

W Mysql lepiej używać do typów tekstowych char czy varchar?

0

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>
0

teoretycznie lepiej varchar, ale czy tak jest w praktyce?

0

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.

1
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1