2011-02-15 6 views
5

ho il seguente GUID:Perché sono binario GUID diverso dal solito rappresentazione

AAB13E97-449B-4D5B-BDE2-AC479C31B782 

Uso System.Guid + DbLinq + SQLite per memorizzare è il seguente campo viene aggiunto al database.

973EB1AA-9B44-5B4D-BDE2-AC479C31B782 

(trattini aggiunti per chiarezza)

posso vedere che gli ultimi 8 byte sono nello stesso ordine, ed i primi 3 gruppi sono invertiti, ma io non capisco perché.

risposta

4

Guardando Wikipedia's article on the subject si dice:

Data4 memorizza il byte nello stesso ordine come visualizzato nella codifica del testo GUID (vedi sotto), ma gli altri tre campi vengono invertiti su sistemi little-endian (per esempio CPU Intel).

così concludo:

  • Questo succede indipendentemente dalle DBMS o schema utilizzato
  • Ciò dipende dal architeture processore
  • Ciò è di progettazione

Quindi la domanda resti:

Perché su e l'hanno progettato in questo modo?

+5

"Perché mai l'hanno progettato in questo modo?" - La mia ipotesi è che i GUID V1 originariamente possedevano l'indirizzo MAC nel campo Data4. Storicamente big-endian era definito come l'ordine standard di byte di rete ed era usato in molte cose relative alla rete come indirizzi IP, indirizzi MAC, ecc. –

+1

Da Wikipedia: 'Versione 1 (indirizzo MAC) Concettualmente, l'originale (versione 1) lo schema di generazione degli UUID consisteva nel concatenare la versione UUID con l'indirizzo MAC del computer che genera l'UUID e con il numero di intervalli di 100 nanosecondi dall'adozione del calendario gregoriano in Occidente. Questo schema è stato criticato in quanto non sufficientemente "opaco"; rivela sia l'identità del computer che ha generato l'UUID sia il momento in cui lo ha fatto –