 <p>UUID is a 128 bit value. The <code>CHAR(16) FOR BIT DATA</code> type reflects that it is bit data stored in character form for conciseness. I don't think <code>VARCHAR(16)</code> would work because it doesn't have the bit flag. The database would have to be able to convert the binary data to character data which deals with encoding and is risky. More importantly, it wouldn't buy you anything. Since a UUID is <em>always</em> 128 bits, you don't get the space savings from using <code>VARCHAR</code> over <code>CHAR</code>. So you might as well use the intended <code>CHAR(16) FOR BIT DATA</code>.</p> <p>With JDBC, I think you use the get/setBytes() method since it is dealing with small amounts of binary data. (Not positive, would have to try this)</p> <p>And no idea about the SQL Server part.</p>