重複の可能性:
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(); }