using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient; //Add reference to MySQL 5.0.5
namespace UTF8Bug
{
public sealed class UTF8Test
{
///
/// Update Connexion string as needed
///
private const string _CnxStr = "server=;user id=root;password=;database=UTF8Test;pooling=true;charset=utf8";
///
/// Insert data in UTF8Test database then Read inserted data and compare with data to insert
///
///
public static string InsertData()
{
string szRet = "Insert Failed";
MySqlConnection myCnx = null;
try
{
string szTestValue = "test:éàçùêûôöïèë";
string sp_Name = "sp_MaTable_Add";
string sp_MonParam = "?_MonParam";
myCnx = new MySqlConnection(_CnxStr);
MySqlCommand myCommand = new MySqlCommand(sp_Name, myCnx);
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters.Add(new MySqlParameter(sp_MonParam, MySqlDbType.LongBlob));
//This Failed (Inserted data are truncated !)
myCommand.Parameters[sp_MonParam].Value = szTestValue;
//This Success (uncomment to test)
//myCommand.Parameters[sp_MonParam].Value = System.Text.Encoding.UTF8.GetBytes(szTestValue);
myCommand.Connection.Open();
object myRes = myCommand.ExecuteScalar();
if (null != myRes)
{
int iNewID = Convert.ToInt32(myRes);
string szSelect = "select * from MaTable where IDRef=" + iNewID;
myCommand = new MySql.Data.MySqlClient.MySqlCommand(szSelect, myCnx);
DataSet myDS = null;
using (MySql.Data.MySqlClient.MySqlDataAdapter sqlDA = new MySql.Data.MySqlClient.MySqlDataAdapter(myCommand))
{
myDS = new DataSet();
sqlDA.Fill(myDS);
}
if (null != myDS)
if (myDS.Tables.Count > 0)
if (myDS.Tables[0].Rows.Count > 0)
{
string szReadValue = System.Text.Encoding.UTF8.GetString((byte[])myDS.Tables[0].Rows[0]["MonChamp"]);
if (0 == string.Compare(szTestValue, szReadValue, false))
szRet = "Insert OK";
}
}
}
catch (Exception exx)
{
szRet += " Err=" + exx.Message;
}
finally
{
if (null != myCnx) myCnx.Close();
}
return szRet;
}
}
}