Short answer: a GUID is a UUID. The two words describe the same 128 bit identifier with the same 8-4-4-4-12 text format. GUID is simply the name Microsoft chose, and it stuck across the Windows, .NET and SQL Server world. Everywhere else people say UUID.
Where the two names come from
UUID stands for Universally Unique Identifier. The format was created for the Apollo Network Computing System in the 1980s and later standardised by the Open Software Foundation and then the IETF in RFC 4122. GUID stands for Globally Unique Identifier. Microsoft adopted the OSF format for COM in the early 1990s and used its own name in all its documentation. The bits are identical.
Where they are truly identical
- Both are 128 bits.
- Both use the same text form of 32 hex digits and four hyphens.
- A GUID from
Guid.NewGuid()in C# is a valid RFC version 4 UUID. It has the 4 in the version position and one of 8, 9, a or b in the variant position. - You can pass a GUID string to any UUID parser in any language and it will accept it, and the reverse.
The one real difference: byte order
The trap is not in the value but in how it is stored in memory. The RFC says a UUID is a sequence of 16 bytes in big endian order. Microsoft's Guid struct stores the first three groups as native integers, which on x86 are little endian. So when .NET turns a GUID into bytes with Guid.ToByteArray(), the first three groups come out reversed:
Text: 00112233-4455-6677-8899-aabbccddeeff
RFC: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
.NET: 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff
If you write those bytes from .NET and read them in Python or Java, you get a different UUID. .NET 8 and later fix this with Guid.ToByteArray(bigEndian: true) and new Guid(bytes, bigEndian: true). On older versions you must swap the bytes by hand.
SQL Server sorts them strangely
SQL Server's uniqueidentifier type compares GUIDs group by group starting from the last group and working backwards. That means the ordering you see in ORDER BY id does not match text order or byte order. It also means a time ordered UUID v7, which puts its timestamp at the front, does not sort by time in SQL Server. If you need sequential inserts there, use NEWSEQUENTIALID() or build a v8 UUID that puts the timestamp in the last group.
Brace style formatting
Windows registry and COM documentation often wrap GUIDs in braces and use uppercase:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
This is only a display convention. The RFC recommends lowercase without braces. Most parsers accept both, but if you are writing a validator, decide up front whether to allow braces. See How to Validate a UUID with Regex.
Which word should you use?
Use whichever your ecosystem uses. In C#, PowerShell, SQL Server and Windows APIs say GUID so that you match the type names. Everywhere else say UUID. When writing documentation for a mixed audience, pick one and add a note that they are the same thing.
Whatever you call them, our UUID generator will make valid ones for either world.