可能重复:
我应该如何在MySQL表中存储GUID?
VARCHAR将返回,因为string
BLOB将返回,byte[]
但是,哪个列类型的MySQL将作为System.Guid在C#中返回
感谢.
编辑:我找到答案
感谢DaveHogan,它给了我关于ORM(对象关系映射)的线索
我开始寻找有关Connector/NET所做的数据类型转换(映射)的信息.我正在使用MySQL Dot Net Connector(Connector/NET)
,连接器/ NET执行不同的3种情况.
以下是我发现的内容:
第一种情况:
从Connnector/NET 6.1.1开始,CHAR(36)将自动转换为C#中的System.GUID,BINARY(16)将被视为System.Byte [].
第二种情况:
如果使用较旧的Connector/NET,当值传递给C#时,BINARY(16)将自动转换为System.GUID,而CHAR(36)将被视为System.String.
第三种情况:
如果您使用较新的Connector/NET(比6.1.1更新),并且如果您想使用BINARY(16) AS System.GUID(默认情况下不是),则必须添加连接选项Old Guids =连接字符串中为true.
例:
server=localhost;user=root;password=qwerty;database=test;old guids=true;
通过这个,CHAR(36)将被转换为System.String和BINARY(16) = System.GUID
阅读更多关于Old Guids的连接选项的信息:
MySQL 5.6参考手册:21.2.6.连接器/网络连接字符串选项参考
------------------------------------------- ---------------------------
额外信息:
如何将System.GUID插入MySql数据库
----------- -------------------------------------------------- ---------
这是一个示例表,我们将插入System.GUID:
CREATE TABLE `testdata` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `binary` binary(16) DEFAULT NULL, `char` char(36) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
将System.GUID插入MySQL
string constr = "server=localhost;user=root;pwd=qwerty;database=test;";
using (MySqlConnection conn = new MySqlConnection(constr))
{
conn.Open();
// Create a System.GUID
byte[] ba = new byte[16];
Random rd = new Random();
rd.NextBytes(ba);
System.Guid guid = new Guid(ba);
// Prepare GUID values in SQL format
string guidForChar36 = guid.ToString();
string hexstring = BitConverter.ToString(guid.ToByteArray());
string guidForBinary16 = "0x" + hexstring.Replace("-", string.Empty);
string sql = "insert into testdata(`binary`,`char`)"
+ "values(" + guidForBinary16 + ","
+ "'" + guidForChar36 + "');";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
编辑:
抱歉我误解了你的问题。你应该使用
BINARY(16)
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 System.Guid 取决于您是否使用 ORM 等。