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(); }
答案 0 :(得分:3)
编辑:
抱歉,我误解了你的问题。你应该使用
BINARY(16)
如何将其转换为System.Guid取决于您是否使用ORM等。
答案 1 :(得分:0)
如果要充分利用存储空间,可以将guid用作CHAR(16)
二进制文件。
或使用char(36)