2012-10-19 50 views
6

可能重複:
How should I store GUID in MySQL tables?什麼列類型將在C#返回作爲的System.Guid


VARCHAR將恢復爲string
BLOB將返回as byte[]
但是,什麼列類型的MySQL將返回爲System.Guid in C#
謝謝。

編輯:我已經找到了答案

感謝DaveHogan這給了我關於ORM(對象關係映射)的線索
我開始尋找有關數據類型轉換(映射)的信息通過連接器/ NET做。 我使用MySQL Dot Net Connector(Connector/NET)
Connector/NET執行的存在不同的3種情況。

下面是我發現:

1日情況:
從Connnector/NET 6.1.1,CHAR(36)將自動在C#轉換爲的System.Guid和BINARY啓動( 16)將被視爲System.Byte []。

第二情況:
如果使用較舊的連接器/ NET,BINARY(16)將當值被傳遞到C#和CHAR(36)將被視爲被自動轉換爲的System.Guid作爲System.String。

第三狀況:
如果使用新的連接器/ 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

瞭解更多關於舊的連接選項Guids at:
MySQL 5.6 Reference Manual: 21.2.6. Connector/Net Connection String Options Reference

---------------------------------------- ------------------------------
附加信息:
如何插入系統。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

它是MSSQL中的唯一標識符。也許它在MySQL – Ondra

回答

2

編輯:

對不起,我誤解你的問題。您應該使用

BINARY(16) 

你怎麼強制轉換到的System.Guid取決於您正在使用ORM等

+0

em中類似...對不起。你能解釋什麼是ORM? – mjb

+0

http://en.wikipedia.org/wiki/Object-relational_mapping –

+0

不,我正在使用MySql Dot Net Connector。 MySql.Data.DLL – mjb

0

您可以使用GUID作爲一個CHAR(16)二進制如果你想做出最優化使用存儲空間。 或使用char(36)

+5

沒有。不要使用字符二進制數據。 char/varchar/text字段受制於字符集轉換規則,並且可以輕鬆地轉換二進制數據。對二進制數據始終使用二進制/ varbinary/blob類型。 –

+1

嗨,Ravindra,我發現從Connector/NET 6.1.1開始,CHAR(36)將默認返回爲System.GUID。和舊版本6.1.1以上的Connector/NET,BINARY(16)將作爲System.GUID返回。我已經添加了我的發現(結論),並在我的問題中進行了更新。還是要謝謝你的幫助。 – mjb

相關問題