什么列类型的MySQL将作为C#中的System.Guid返回

时间:2012-10-19 14:23:43

标签: c# mysql

  

可能重复:
  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执行的是不同的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(默认情况下不是),则必须添加连接连接字符串中的选项旧Guids = true 。例如:

server=localhost;user=root;password=qwerty;database=test;old guids=true;

由此, CHAR(36)将转换为System.String, BINARY(16) = System.GUID

有关旧Guids 的连接选项的详情,请参阅:MySQL 5.6 Reference Manual: 21.2.6. Connector/Net Connection String Options Reference

-------------------------------------------------- --------------------
额外信息:
如何将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();
}

2 个答案:

答案 0 :(得分:3)

编辑:

抱歉,我误解了你的问题。你应该使用

BINARY(16)

如何将其转换为System.Guid取决于您是否使用ORM等。

答案 1 :(得分:0)

如果要充分利用存储空间,可以将guid用作CHAR(16)二进制文件。 或使用char(36)