可能重复:
我应该如何在 MySQL 表中存储 GUID?
VARCHAR将返回,因为string
BLOB将返回,byte[]
但是,MySQL 的哪种列类型将在 C# 中返回为System.Guid
,
谢谢。
编辑:感谢 DaveHogan,
我找到了答案,它为我提供了有关 ORM(对象关系映射)的线索,
我开始寻找有关 Connector/NET 进行的数据类型转换(映射)的信息。我正在使用 MySQL Dot Net Connector (Connector/NET)
,Connector/NET 执行不同的 3 种情况。
以下是我发现的:第一种情况:从连接器
/NET 6.1.1 开始,CHAR(36)将在 C# 和BINARY(16)中自动转换为 System.GUID
将被视为 System.Byte[]。
第二种情况:
如果您使用较旧的连接器/NET,当值传递到 C# 时, BINARY(16)将自动转换为 System.GUID,而CHAR(36)将被视为 System.String。
第三种情况:
如果您使用较新的 Connector/NET(比 6.1.1 更新),并且如果您想使用BINARY(16) AS System.GUID(默认情况下不是),则必须添加连接选项Old Guids=在连接字符串中为真。
例子:
服务器=本地主机;用户=root;密码=qwerty;数据库=测试;旧 guids=true;
这样,CHAR(36)将被转换为 System.String 和BINARY(16) = System.GUID
阅读更多关于旧 Guid的连接选项的信息:
MySQL 5.6 参考手册:21.2.6。连接器/网络连接字符串选项参考
------------------------------------------- ---------------
额外信息:
如何将 System.GUID 插入 MySql 数据库
----------- -------------------------------------------------- ---------
这是一个示例表,我们将插入 System.GUID:
创建表`testdata`( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `binary` binary(16) 默认为 NULL, `char` char(36) 默认为空, 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=1 默认字符集=utf8
将 System.GUID 插入 MySQL
string constr = "server=localhost;user=root;pwd=qwerty;database=test;"; 使用 (MySqlConnection conn = new MySqlConnection(constr)) { conn.Open(); // 创建一个 System.GUID 字节[] ba = 新字节[16]; 随机 rd = new Random(); rd.NextBytes(ba); System.Guid guid = new Guid(ba); // 以 SQL 格式准备 GUID 值 字符串 guidForChar36 = guid.ToString(); 字符串十六进制字符串 = BitConverter.ToString(guid.ToByteArray()); 字符串 guidForBinary16 = "0x" + hexstring.Replace("-", string.Empty); string sql = "插入测试数据(`binary`,`char`)" + "值(" + guidForBinary16 + "," + "'" + guidForChar36 + "');"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.ExecuteNonQuery(); conn.Close(); }