2009-08-13 9 views
13

Nota prawna: Jestem bardzo nowy w SQL i bazach danych w ogóle.[Mój] SQL VARCHAR Size and Null-Termination


Potrzebuję utworzyć pole, w którym będzie przechowywanych maksymalnie 32 znaków danych tekstowych. Czy "VARCHAR(32)" oznacza, że ​​mam dokładnie 32 znaków dla moich danych? Czy muszę rezerwować dodatkową postać do wypowiedzenia zerowego?

Przeprowadziłem prosty test i wygląda na to, że jest to bufor WYSIWYG. Jednak chciałem uzyskać konkretną odpowiedź od ludzi, którzy naprawdę wiedzą, co robią.


Mam tło C [++], więc to pytanie podnosi dzwonki alarmowe w mojej głowie.

Odpowiedz

24

Tak, do dyspozycji masz 32 znaki. SQL nie zajmuje się nul zakończonymi łańcuchami, jak to robią niektóre języki programowania.

+0

Dziękuję, to ulga. –

1

Twój rozmiar specyfikacji VARCHAR to maksymalny rozmiar danych, czyli w tym przypadku 32 znaki. Jednak VARCHARS są polem dynamicznym, więc rzeczywiste fizyczne wykorzystanie pamięci jest tylko wielkością danych plus jeden lub dwa bajty.

Jeśli wprowadzisz 10-znakowy ciąg do VARCHAR (32), fizyczna pamięć będzie miała 11 lub 12 bajtów (instrukcja pokaże Ci dokładną formułę).

Jednakże, gdy MySQL ma do czynienia z zestawami wyników (tj. Po SELECT), 32 bajty zostaną przydzielone w pamięci dla tego pola dla każdego rekordu.

+0

+1 dla wyjaśnienia przydziału pamięci podczas wybierania pola. Zastanawiam się, jak to działa z polami TEXT i BLOB ... – Leonel