本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How should I store GUID in MySQL tables?
VARCHAR将返回为string
BLOB将返回为byte[]
但是,MySQL的哪种列类型将在C#中以System.Guid的形式返回
谢谢。
编辑:我找到了答案
多亏了DaveHogan,它为我提供了有关ORM(对象关系映射)的线索
我开始寻找有关Connector / NET进行的数据类型转换(映射)的信息。
我正在使用MySQL Dot Net Connector(Connector / NET)
Connector / NET会执行三种不同的情况。
以下是我发现的内容:
第一种情况:
从Connnector / NET 6.1.1开始,CHAR(36)将自动转换为System.GUID(在C#中),而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
在以下网址了解有关旧指南的连接选项的更多信息:
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();
}
它是MSSQL中的uniqueidentifier。 也许它与MySQL类似
编辑:
对不起,我误解了你的问题。 你应该用
BINARY(16)
如何将其转换为System.Guid取决于您是否使用ORM等。
抱歉。您能解释一下什么是ORM吗?
zh.wikipedia.org/wiki/Object-relational_mapping
不,我正在使用MySql Dot Net Connector。 MySql.Data.DLL
嗨,DaveHogan,感谢ORM的提示。我开始查找有关Connector / NET进行的数据类型映射的信息。这就是我发现的:
从Connector / NET 6.1.1开始,默认情况下,CHAR(36)将作为System.GUID返回。和版本6.1.1之前的Connector / NET版本,BINARY(16)将作为System.GUID返回。我添加了我的发现(结论)并更新了我的问题。谢谢你的帮助。
我使用EF。关于如何将byte [](binary16)转换为GUID的任何指针?当前,我执行Guid.NewGuid(myByteArray),但是有时由于Byte array for GUID must be exactly 16 bytes long.而失败
如果要最大程度地利用存储空间,可以将GUID用作CHAR(16)二进制文件。
或使用char(36)
没有。不要将char用于二进制数据。 char / varchar / text字段受字符集转换规则的约束,并且可以轻松处理二进制数据。始终对二进制数据使用二进制/ varbinary / blob类型。
嗨,Ravindra,我发现默认情况下从Connector / NET 6.1.1开始,CHAR(36)将作为System.GUID返回。和版本6.1.1之前的Connector / NET版本,BINARY(16)将作为System.GUID返回。我添加了我的发现(结论)并更新了我的问题。还是要谢谢你的帮助。