2009-08-13 11 views
13

Haftungsausschluss: Ich bin sehr neu in SQL und Datenbanken im Allgemeinen.[My] SQL VARCHAR Größe und Null-Terminierung


Ich muss ein Feld erstellen, das maximal 32 Zeichen Textdaten speichert. Bedeutet "VARCHAR(32)", dass ich genau 32 Zeichen für meine Daten habe? Muss ich ein zusätzliches Zeichen für die Null-Terminierung reservieren?

Ich führte einen einfachen Test und es scheint, dass dies ein WYSIWYG-Puffer ist. Ich wollte jedoch eine konkrete Antwort von Leuten bekommen, die tatsächlich wissen, was sie tun.

Ich habe einen C [++] Hintergrund, also wirft diese Frage Alarmglocken in meinem Kopf auf.

Antwort

24

Ja, Sie haben 32 Zeichen zur Verfügung. SQL beschäftigt sich nicht mit null terminierten Strings, wie es einige Programmiersprachen tun.

+0

Vielen Dank, das ist eine Erleichterung. –

1

Ihre VARCHAR-Spezifikationsgröße ist die maximale Größe Ihrer Daten, also in diesem Fall 32 Zeichen. Da VARCHARS jedoch ein dynamisches Feld sind, ist der tatsächlich verwendete physische Speicher nur die Größe Ihrer Daten plus ein oder zwei Bytes.

Wenn Sie eine 10-stellige Zeichenkette in ein VARCHAR (32) schreiben, beträgt der physische Speicher 11 oder 12 Byte (das Handbuch wird Ihnen die genaue Formel mitteilen).

Wenn MySQL jedoch mit Resultsets arbeitet (dh nach einem SELECT), werden 32 Bytes im Speicher für dieses Feld für jeden Datensatz zugewiesen.

+0

+1 für die Erklärung der Speicherallokation bei der Auswahl des Feldes. Ich frage mich, wie es mit TEXT und BLOB Feldern funktioniert ... – Leonel