C#链接MYSQL 查询数据时,链接字符串需要加CharSet=gb2312,否则执行带参数的语句时返回null。
static string connectionStr = "server=localhost;port=3306;CharSet=gb2312;user=xxx;password=xxx;database=xxx";
string sql = "select * from users where name = @name";
using (MySqlConnection conn = new MySqlConnection(connectionStr))
{
MySqlCommand cmd = new MySqlCommand(sql, conn);
conn.Open();
cmd.Parameters.AddWithValue("@name", "张三");
MySqlDataReader reader = cmd.ExecuteReader();
return ConvertDataReaderToDataTable(reader);
}
原因:
一、编码格式简介
1、UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码,被称为通用转换格式;是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间;另外,如果是外国人访问你的GBK网页,需要下载中文语言包支持。访问UTF-8编码的网页则不出现这问题。可以直接访问;它的通用性比较好。
2、国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)。GBK编码专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。GBK是国家编码,通用性比UTF8差。
二、问题根源
MySQL数据库默认的编码模式为UTF8格式,在使用对应的sql语句查询时,即使数据库连接正常但是对应的内容依然查询不出来,所以需要在MySQL数据库的连接字符串那里设置格式为GB2312即可。