1

Temat: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Witam

Chciałem się zapytać czy nie lepiej używać varchar zamiast char jako typ dla przeróżnych znaków, bo nie wiem czym to ma się różnic w końcowej pracy serwera?

Np:

Mamy jakieś imie -

CREATE TABLE tabela (
imie varchar(20));

i

CREATE TABLE tablea (
imie var(20));

i

CREATE TABLE tabela (
imie text);

Czym to się różni w pracy serwera?. Typ "text" czyta jedynie tekst, a char/varchar znaki. Znaki, czyli wszystko, po co bawić się w ogrniczenia?

Analogiczna sytuacja do typów numerycznych, jeżeli mamy wrzucić w tabele jakieś cyfry/liczby.

CREATE TABLE tabela (
numer int2);

CREATE TABLE tabela (
numer int4);

CREATE TABLE tabela (
numer int8);


Każde z typów numerycznych ma ogranczenie, ale jaka jest różnica w praktyce, gdy użyje int8, albo int2 gdy potrzbuje JEDYNIE liczb od 1 do 4. Co z tego jak użyje int2, a int8 do tej operacji na danych? Czy inaczej on to jakos liczy, gdy ma int8, a inaczej gdy ma in2, a jeszcze inaczej gdy ma int4? Nie lepiej mieć jede typ np: int4, w ktorym chyba może sie mieścic największa liczba?,ale nie musi.


Nie lepiej dla typów tekstowych i numerycznych dać zamiennik po prostu jako varchar? on czyta przecież znaki, a znaki, czyli wszystko. PO CO SĄ TE RÓŻNE TYPY, gdy mamy varchar, które czyta znaki, z znaki to literka i cyfra, tego nie rozumiem i czym one się różnią od siebie w pracy serwera?

2

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Ale pojechałeś teraz człowieku smile.
varchar(n), char(n) napisy o  maksymalnej dlugosci n (char uzupelnia napisy spacjami jesli sa mniejsze niz n)
text jest 'nieograniczony' (nieograniczony to duzo powiedziane dlatego napisalem w '').

Jasne ze moglby byc tylko typ text ale pamiec jaka baza by wtedy rezerwowala  na tabele bylaby bardzo duzo.
W zaleznosci od tego co chcesz przechowywac masz rozne typy, jesli przechowujesz imie, naziwsko to wiesz ze pewnie nie beda dluzsze niz np 50 wiec varchar(50). Jesli chcesz przechowywac informacje typu 'tresc maila' wtedy terudniej bedzie Ci okreslic jaka bedzie dlugosc przechowywanych maili wiec mozesz uzyc typu text.

Analogicznie z typami liczbowymi.

Proponuje poczytac dokumentacje na postgresql.org

3

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Trochę się zle wyraziłem.

Przykładowo chcesz wpisac imie i nazwisko, potrzebujesz jak wspommiałeś wyżej 50 znaków, czym w takim razie będzie się różnił wybór char, od varchar, pomijam tutaj uzupełnienia spacjami w char.

Robert - czy to imie bedzie tak samo szybko przetworzone w char i varchar? I tak oba typy mają powyżej setki(100), a imie ma 6 znaków.

Tak samo numeryczne:

123  - taka sobie liczba i nawet jeżeli użyjemy int2, który ma 32767, to i tak astronomiczna suma jak dla przykladu z "123". Jaka jest różnica gdy użyje się int2/4/8 w kolejnej zwiększa sie pula.

Ale to nadal 123. Czasami nawet to jest 23.

Czy serwer jakoś inaczej przetworzy liczby/tekst jeżeli się użyję najmniejszego typu, ale nadal i tak ogromnego w porównaniu z proporcją tego "123". Czy jest różnica od strony serwera, jeżeli się użyje dla niej int2/4 albo 8? Czy może nie ma żadnej? Wtedy moje pytanie brzmi - czy nie lepiej używać tych największych, jeżeli i tak różnicy w końcowym rozrachunku w ogóle nie ma?

4

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Co do varchar i char nie jestem pewien czy zauwazysz różnice w szybkości, ale z char trzeba uważać, bo 'Robert' na  na char(100) nie bedzie wypisany przez zapytanie

select * from tabela where kolumna like '%Robert';

bo uzupelnia spacjami. Lepiej uzywac char.

Co do typów numerycznych nie moge sie z toba zgodzic. Chcialbys aby byl tylko jeden typ, znaczy pewnie int8. Ale wyobrazasz sobie aby kazda kolumna byla wtedy typu int8 (liczba osmiobajtowa chyab do 18 cyfr). Po co dla kolumn, ktore na przyklad przechowuja wiek, numer buta itp itd rezerwowac 8 bajtów pamięci. Wiesz ile zamjmie miejsca tabela z takimi typami numerycznymi ktora ma 100 mln rekordów? Dlatego jesli nie musisz nie bierz najwiekszych typów (w stylu text, int8).

5

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Aaaaa... rozumiem. Czyli wybór tak naprawdę rozchodzi się o pamięć, bo szybkość raczej jest niezauważalna pod sprzętem czasów 21 wieku.

Czyli dla jednoznakowej, lepiej używać char (1 bajt), a dla powyżej dwu - varchar()

Szkoda tylko, że nie ma większej ilości typów numerycznych(bardziej szczegółowych), bo jak można zauważyć jest jedynie  int2, a ten typ to 32767 (2 bajty), mogliby zrobić dla jednego (1)bajta, tak jak w znakowych.

Co najlepiej używać dla jednej cyfry?  int2, czy może char?

arch - to jeden znak, ale z drugiej strony int2 - są dla cyfr/liczb..

Ostatnio edytowany przez tomboy (2009-02-03 21:30:44)

6

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Wybór typu zależy od tego co bedziesz chcial z danymi w kolumnie wykonywac. Czy bedziesz wykonywal select z operacjami arytmetycznymi na danych w kolumnie, jesli tak to lepiej bedzie uzyc typu liczbowego. Jesli bedziesz chcial uzywac wyrazen regularnych wiec pewnie lepiej uzyc danych napisowych.

Co do szybkosci to pewnie tez jest roznica pomiedzy dostepem do danych text i varchar ale nie wiem czy zauwazalna w domowych warunkach.

7

Odp: char vs varchar i podobne typy - NIE ROZUMIEM PO CO JEST ICH TAK DUŻO

Czyli kolejna zależność.. Teraz bardziej staje się jasne wykorzystanie konkretnego typu. Dziękuje za odpowiedzi.