guid型 mysql_MySQL的哪种列类型将在C#中作为System.Guid返回

本问题已经有最佳答案,请猛点这里访问。

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返回。我添加了我的发现(结论)并更新了我的问题。还是要谢谢你的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值