Description:
connectionString character set=gbk;
insert binary field error
How to repeat:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace MysqlTest
{
class Program
{
static void Main(string[] args)
{
string cmd;
while (true)
{
try
{
Console.Write(">");
cmd = Console.ReadLine();
if (cmd == "exit")
break;
InsertBinary2();
}
catch { }
}
}
private static readonly string InsertSql = "insert into t1(id,name,f1,f2,guid) values(?id,?name,?a,?b,?guid)";
private static readonly Random random = new Random();
public static void InsertBinary2()
{
int lenIn = 400000;
byte[] dataIn = Utils.CreateBlob(lenIn);
MySqlConnection c = new MySqlConnection();
try
{
c = new MySqlConnection("connection timeout=25; user id=root; " +
"password=123456; database=test;server=localhost; " +
"pooling=false;min pool size=5;character set=gbk;max pool size=101");
c.Open();
for (int i = 0; i < 1000; i++)
{
using (MySqlCommand cmd = new MySqlCommand(InsertSql, c))
{
IDbDataParameter prm1 = cmd.CreateParameter();
prm1.ParameterName = "id";
prm1.DbType = DbType.Int32;
prm1.Value = random.Next();
cmd.Parameters.Add(prm1);
IDbDataParameter prm2 = cmd.CreateParameter();
prm2.ParameterName = "name";
prm2.DbType = DbType.String;
prm2.Value = random.Next().ToString();
cmd.Parameters.Add(prm2);
IDbDataParameter prm3 = cmd.CreateParameter();
prm3.ParameterName = "a";
prm3.DbType = DbType.DateTime;
prm3.Value = DateTime.Now;
cmd.Parameters.Add(prm3);
IDbDataParameter prm4 = cmd.CreateParameter();
prm4.ParameterName = "b";
prm4.DbType = DbType.Binary;
prm4.Value = Guid.NewGuid().ToByteArray();
cmd.Parameters.Add(prm4);
IDbDataParameter prm5 = cmd.CreateParameter();
prm5.ParameterName = "guid";
prm5.DbType = DbType.Guid;
prm5.Value = Guid.NewGuid().ToByteArray();
cmd.Parameters.Add(prm5);
int rows = cmd.ExecuteNonQuery();
//cmd.Prepare();
Console.WriteLine("插入行数:{0}", rows);
}
}
}
catch
{
}
finally
{
c.Close();
}
}
}
/// <summary>
/// Summary description for Utils.
/// </summary>
public class Utils
{
public static byte[] CreateBlob(int size)
{
byte[] buf = new byte[size];
Random r = new Random();
r.NextBytes(buf);
return buf;
}
}
}
Suggested fix:
why:
MySql.Data\MySqlStream.cs(145):
if (packet.Version.isAtLeast(5, 5, 0))
msg = packet.ReadString(Encoding.UTF8);//why?
else
msg = packet.ReadString();
Description: connectionString character set=gbk; insert binary field error How to repeat: using System; using System.Data; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; namespace MysqlTest { class Program { static void Main(string[] args) { string cmd; while (true) { try { Console.Write(">"); cmd = Console.ReadLine(); if (cmd == "exit") break; InsertBinary2(); } catch { } } } private static readonly string InsertSql = "insert into t1(id,name,f1,f2,guid) values(?id,?name,?a,?b,?guid)"; private static readonly Random random = new Random(); public static void InsertBinary2() { int lenIn = 400000; byte[] dataIn = Utils.CreateBlob(lenIn); MySqlConnection c = new MySqlConnection(); try { c = new MySqlConnection("connection timeout=25; user id=root; " + "password=123456; database=test;server=localhost; " + "pooling=false;min pool size=5;character set=gbk;max pool size=101"); c.Open(); for (int i = 0; i < 1000; i++) { using (MySqlCommand cmd = new MySqlCommand(InsertSql, c)) { IDbDataParameter prm1 = cmd.CreateParameter(); prm1.ParameterName = "id"; prm1.DbType = DbType.Int32; prm1.Value = random.Next(); cmd.Parameters.Add(prm1); IDbDataParameter prm2 = cmd.CreateParameter(); prm2.ParameterName = "name"; prm2.DbType = DbType.String; prm2.Value = random.Next().ToString(); cmd.Parameters.Add(prm2); IDbDataParameter prm3 = cmd.CreateParameter(); prm3.ParameterName = "a"; prm3.DbType = DbType.DateTime; prm3.Value = DateTime.Now; cmd.Parameters.Add(prm3); IDbDataParameter prm4 = cmd.CreateParameter(); prm4.ParameterName = "b"; prm4.DbType = DbType.Binary; prm4.Value = Guid.NewGuid().ToByteArray(); cmd.Parameters.Add(prm4); IDbDataParameter prm5 = cmd.CreateParameter(); prm5.ParameterName = "guid"; prm5.DbType = DbType.Guid; prm5.Value = Guid.NewGuid().ToByteArray(); cmd.Parameters.Add(prm5); int rows = cmd.ExecuteNonQuery(); //cmd.Prepare(); Console.WriteLine("插入行数:{0}", rows); } } } catch { } finally { c.Close(); } } } /// <summary> /// Summary description for Utils. /// </summary> public class Utils { public static byte[] CreateBlob(int size) { byte[] buf = new byte[size]; Random r = new Random(); r.NextBytes(buf); return buf; } } } Suggested fix: why: MySql.Data\MySqlStream.cs(145): if (packet.Version.isAtLeast(5, 5, 0)) msg = packet.ReadString(Encoding.UTF8);//why? else msg = packet.ReadString();