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();