用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常。但用asp.net连接显示中文如何处理也显示不了,网络上也查了一天,用了各种办法也未搞定,跪求解决方案。谢谢,下面是我的代码:
string connstr = "Database=" + ACDB + ";Password=123456;User ID=root;Server=10.20.2.140;port=811";
conn = new MySqlConnection(connstr);
conn.Open();
//下面是网上说的处理方式,设置成功但显示依旧
string ss1 = "SET names 'UTF8'";
MySqlCommand command = new MySqlCommand(ss1, conn);
command.ExecuteNonQuery();
string query = "select name from crc_name";
MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn);
DataTable dt = new DataTable();
adapter.Fill(dt); for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
//依然是乱码
string sss1 = dt.Rows[i][0].ToString(); //中文字符集转换
var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
var utf = System.Text.Encoding.UTF8; byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
//没有任何作用
var value = utf.GetString(unicodeBytes); }
string connstr = "Database=" + ACDB + ";Password=123456;User ID=root;Server=10.20.2.140;port=811";
conn = new MySqlConnection(connstr);
conn.Open();
//下面是网上说的处理方式,设置成功但显示依旧
string ss1 = "SET names 'UTF8'";
MySqlCommand command = new MySqlCommand(ss1, conn);
command.ExecuteNonQuery();
string query = "select name from crc_name";
MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn);
DataTable dt = new DataTable();
adapter.Fill(dt); for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
//依然是乱码
string sss1 = dt.Rows[i][0].ToString(); //中文字符集转换
var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
var utf = System.Text.Encoding.UTF8; byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
//没有任何作用
var value = utf.GetString(unicodeBytes); }
确定数据库字符集
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\set names utf8后的结果是:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\
怀疑你表的字符集被设为latin,
用show create TABLE XXXX看一下你表的字符集
//中文字符集转换
var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
var utf = System.Text.Encoding.UTF8; byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
//没有任何作用
建议在统一的字符集下操作
贴结果
如果字段是latin1编码,要在代码中转换成latin1字符
`account_id` int(10) unsigned DEFAULT NULL,
`crc` int(10) unsigned NOT NULL,
`name` varchar(128) DEFAULT NULL,
PRIMARY KEY (`crc`),
KEY `index_crc` (`crc`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
MySqlCommand command = new MySqlCommand(ss1, conn);
command.ExecuteNonQuery();
string query = "select name from crc_name";
MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn);
DataTable dt = new DataTable();
adapter.Fill(dt); for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
//依然是乱码
string sss1 = dt.Rows[i][0].ToString(); //中文字符集转换
var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
var utf = System.Text.Encoding.UTF8; byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
//没有任何作用
var value = utf.GetString(unicodeBytes); }
var utf = System.Text.Encoding.UTF8; byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
//没有任何作用
var value = utf.GetString(unicodeBytes); } 上述部分是否为你说的代码部分转换?
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码
转换只能依靠自己的程序,当时是如何存进去的,现在就如何解出来.
"用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常" 可以判断在latin1字段里实际存的是utf8码试一下:(请原谅我没学过asp.net)
SET names 'latin1'" 或 set names ascii 是必须的接下来的转换就不要了
var utf = System.Text.Encoding.UTF8;
byte[] utfcodeBytes = utf.GetBytes(dt.Rows[i][0].ToString());
var value = utf.GetString(utfcodeBytes);
看一下编码。
如果没有数据可以重新建表,有数据的活就修改列的编码格式吧。
中文:视频语音[U3] 获取的结果是:�?�'语�Y�[U3]
但代码转化过来就怎么都不对,太崩溃了。已经搞了3天了。
但如果不修改列编码,保持latin1,那么写进去读出来,无论我怎么转化,都有问题。
这个就是结果:写入 视频语音[U3]
未经过转化的查询结果是:视频è¯éŸ³[U3]
经过转化的查询结果是:�?�'语�Y�[U3]
在你的程序中, 将获取的字符串当作utf8.