Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 13:52

Hallo zusammen,
Gibt es irgendwo eine Aufstellung, in welcher ersichtlich ist, wieviel Bytes die einzelnen Feldtypen einer Navision Tabelle belegen?

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 14:15

Also wenn du bisher nichts bei deinen Recherchen gefunden hast, würde ich Try & Error probieren. Heißt einfach sehr viele laaaaange Textfelder in eine Testtabelle einfügen und versuchen zu Speichern und Compilieren. Wenn es fehlschlägt (auf Grund von zu vielen Bytes pro Datensatz), dann kann man durch Hinzufügen/Löschen weiterer Felder rausfinden, wie viel denn eins verbraucht.

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 14:46

Ja das wollt ich bisher noch vermeiden. Aber falls sich hier keiner mehr meldet, werde ich das dann wohl machen :wink: und die Ergebnisse hier dann zur Verfügung stellen.

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 15:13

Wenn du einen SQL Server verwendest: C/SIDE Reference

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 15:27

Taugen die Werte des Feldes Len der Tabelle Field nicht?

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 15:35

Meinst du nicht, dass das zu leicht ist? :lol:

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 15:57

Nunja, da steht für ein Bool eine Länge von 4, und das verwirrt mich denn doch ein wenig :oops: :roll:

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 16:07

Also ich habe nun mal eine Tabelle bis zum Anschlag gefüllt. Sprich: 15 Text Felder mit Länge 250 und ein Feld mit Länge 219. Dies lässt sich noch kompilieren. Sobald ich ein Zeichen mehr einfüge - kommt die Meldung, dass ich 4Bytes über 4000 bin. Ich habe das nun mit allen Datentypen probiert. Bei allen bis auf Text und Code stimmt der Wert, aus der Tabelle Field. An dieser Stelle danke für den Tip (@McClane). Bei Code und Text verhält sich das anders. Bei einem Codefeld erhöht sich die Länge alle 3 hinzugefügten Zeichen um 4 Bytes und bei einem Textfeld alle 4 hinzugefügten Zeichen um 4 Bytes.

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 16:14

Gut zu wissen, besten Dank :)

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 16:41

McClane hat geschrieben:Nunja, da steht für ein Bool eine Länge von 4, und das verwirrt mich denn doch ein wenig :oops: :roll:


Mich auch! :wink:

Ich denke in der heutigen Zeit geht es vorallem um Geschwindigkeitsperformance und weniger um Speicherplatzersparnis, daher sicherlich der Kompromiss.
Auf 32 Bit oder 64 Bit Prozessoren sind die Maschinenbefehle auf 32/64 Bit Register ausgelegt was wohl der Grund für die 4 Bytes sind.

Ein jedes Programm wird ja schließlich in Maschinenbefehle überführt wobei eine 1 Byte-Darstellung evtl. zu längeren Befehlsketten führt, da diese intern sowieso in ein 32 Bit Register geschrieben werden.

Das ist aber nur eine Vermutung meinerseits.

Falls jemand eine bessere Erklärung hat würde mich das auch interessieren.

LaufendeNummer hat geschrieben:Bei einem Codefeld erhöht sich die Länge alle 3 hinzugefügten Zeichen um 4 Bytes...

Ich hoffe doch nicht das Boolean mit "Yes" und "No" gespeichert wird! :shock:

mfg,
winfy
Zuletzt geändert von winfy am 2. September 2010 16:47, insgesamt 2-mal geändert.

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 16:45

winfy hat geschrieben: Ich hoffe doch nicht das Boolean mit "Yes" und "No" gespeichert wird!

Das wär's doch :mrgreen: . Dann würde auch endlich ein "evtl" da rein passen.

Re: Wieviel Bytes belegen die jeweiligen Felder

2. September 2010 18:30

McClane hat geschrieben:
winfy hat geschrieben: Ich hoffe doch nicht das Boolean mit "Yes" und "No" gespeichert wird!

Das wär's doch :mrgreen: . Dann würde auch endlich ein "evtl" da rein passen.

Also ein Fuzzy-Logic-Boolean. Das hat wirklich noch gefehlt. Dann können wir den Zustand von Schrödingers Katze endlich sauber abspeichern. :mrgreen:

Re: Wieviel Bytes belegen die jeweiligen Felder

3. September 2010 08:19

Kowa hat geschrieben:
McClane hat geschrieben:
winfy hat geschrieben: Ich hoffe doch nicht das Boolean mit "Yes" und "No" gespeichert wird!

Das wär's doch :mrgreen: . Dann würde auch endlich ein "evtl" da rein passen.

Also ein Fuzzy-Logic-Boolean. Das hat wirklich noch gefehlt. Dann können wir den Zustand von Schrödingers Katze endlich sauber abspeichern. :mrgreen:


Code:
Fakturafreigabe := "evtl";


Hier nochmal eine Tabelle mit den Speicherplatzberechnungen für die Datentypen:
http://dynamicsuser.net/wikis/navdev/what-field-types-can-i-use-in-navision.aspx

Demnach wäre es wohl Platzsparender einen Boolean als Text der Länge 1 abzuspeichern. :wink:

mfg winfy

Re: Wieviel Bytes belegen die jeweiligen Felder

3. September 2010 08:29

Interessant ist, dass Boolean zwar ein Tinyint SQL-technisch ist und 1 Byte verwendet, Navision aber 4 dafür verbrät.

MS SQL 2005 HELP hat geschrieben:Datentyp Bereich Speicherung
bigint
-2^63 (-9,223,372,036,854,775,808) bis 2^63-1 (9,223,372,036,854,775,807)
8 Byte

int
-2^31 (-2,147,483,648) bis 2^31-1 (2,147,483,647)
4 Byte

smallint
-2^15 (-32,768) bis 2^15-1 (32,767)
2 Byte

tinyint
0 bis 255
1 Byte

Re: Wieviel Bytes belegen die jeweiligen Felder

3. September 2010 08:36

Kowa hat geschrieben:Dann können wir den Zustand von Schrödingers Katze endlich sauber abspeichern.

Und noch mehr:
Code:
if KisteOffen then
  Katze.CalcFields(LebtNoch?);