重複の可能性:
GUIDをMySQLテーブルに格納するにはどうすればよいですか?
VARCHARはstring
BLOBがとして返すように返されbyte[]
ますが、MySQLのどの列タイプがC#
のおかげでSystem.Guidとして返されます。編集:私は
、コネクタ/ NETによって作成されたデータ型変換(マッピング)に関する情報を探し始めた
ORM(オブジェクト関係マッピング)についての手がかりを与えてくれるDaveHoganのおかげで答えを見つけました。MySQL Dot Net Connector(Connector / NET)を使用しています
が、Connector/NETが実行する状況は3つあります。
以下は私が見つけたものです:1番目の状況: 
Connnector / NET 6.1.1から開始し、CHAR(36)はC#およびBINARY(16)でSystem.GUIDとして自動的に変換されます
System.Byte[]として扱われます。
2番目の状況:
古いConnector / NETを使用している場合、値がC#に渡されると、BINARY(16)は自動的にSystem.GUIDとして変換され、CHAR(36)はSystem.Stringとして扱われます。
3番目の状況:
新しいConnector / NET(6.1.1より新しい)を使用し、BINARY(16) AS System.GUID(デフォルトではそうではない)を使用する場合は、接続オプションOldGuids=を追加する必要があります。接続文字列でtrue 。
例:
server = localhost; user = root; password = qwerty; database = test; old guids = true;
これにより、CHAR(36)はSystem.StringおよびBINARY(16) =System.GUIDとして変換されます。OldGuids
の
接続オプションの詳細については、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、 主キー( `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();
    //System.GUIDを作成します
    byte [] ba = new byte [16];
    Random rd = new Random();
    rd.NextBytes(ba);
    System.Guid guid = new Guid(ba);
    //SQL形式でGUID値を準備します
    文字列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();
}