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

mjb*_*mjb 7 c# mysql

可能重复:
我应该如何在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();
}

Dav*_*gan 3

编辑:

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

BINARY(16)
Run Code Online (Sandbox Code Playgroud)

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