我使用
UUID_TO_BIN(UUID(), true)
生成 UUID 并将其存储为 BINARY(16)
。
但是,在获取值时:
var uuid = dataReader.GetGuid(name);
Console.WriteLine(uuid.ToString());
我确实打印了一个 uuid 字符串,但它与在列上运行
SELECT BIN_TO_UUID("col")
时的字符串不同。
我做错了什么?
OldGuids
设置为 true
但仍然得到相同的错误 uuid。UUID_TO_BIN(UUID(), true)
并将它们存储为 BINARY(16)
的原因是,根据我的阅读,我认为这是存储 uuid 并将其用作主键的最有效方法。谢谢
尝试将连接字符串的
GuidFormat
的值指定为Binary16
:
var sb = new MySqlConnectionStringBuilder
{
GuidFormat = MySqlGuidFormat.Binary16,
};
原因是 MySQL 按字节顺序构造 GUID 字符串,而 .NET 将前三部分以默认字节序转换为整数形式。
MySqlDataReader.GetGuid
默认情况下不会更改字节序,因此一般情况下它会是 LE,除非指定了 GuidFormat
属性。