8

重複の可能性:
GUIDをMySQLテーブルに格納するにはどうすればよいですか?


VARCHARstring
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();
}
4

2 に答える 2

3

編集:

申し訳ありませんが、あなたの質問を誤解しました。あなたは使用する必要があります

BINARY(16)

それをSystem.Guidにキャストする方法は、ORMなどを使用しているかどうかによって異なります。

于 2012-10-19T14:25:17.163 に答える
0

CHAR(16) ストレージスペースを最大限に活用したい場合は、GUIDをバイナリとして使用できます。または使用するchar(36)

于 2012-10-19T14:28:30.000 に答える