最近在做项目的时候,用C#向mysql数据中插入数据,数据当中有汉字。结果在数据库中出现了乱码的问题(我当时数据库中的汉字都显示为?号了)。在网上搜集了很多的解决办法,一直也没有成功。最后在连接数据库的时候,设定了一下编码集,问题得到了解决。那么现在,小编总结一下出现乱码的问题的一些原因和解决办法。
遇到乱码的问题,首先我们要查看是不是自己的sql语句写错了,这个你可以设置断点,看看sql语句里汉字是否是乱码,如果是的话,证明你未插入数据之前sql就是乱码。这个就是你读文件时没有统一编码集。我做项目的时候,从日志文件中读信息,日志文件是ASCII码。于是在读文件的时候我转化了一下编码格式。代码如下(用的是C#语言):
FileStream fs = new FileStream(filePath, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.GetEncoding("GB2312"));
如果自己的sql语句没有问题,里面显示的是汉字,则证明乱码是编码集不对应引起的。这种问题网上有很多的解释,大体有以下几种:
1,MySql安装文件下的my.ini文件里更改其默认编码,但是如果安装的mysql的时候已经设置好了编码集,则不建议修改。像我公司里,好几个项目都在用这个数据库,那么一改可能会使得别的项目出现问题。所以,如果做的是公司项目,不建议修改my.ini,公司的领导也不允许你更改。
2,执行sql插入数据的时候,首先设置一下编码的sql,让其先执行,在执行插入操作,参考代码如下:
MySqlConnection con = new DBCon().GetConn();
con.Open();
MySqlCommand cmd = new MySqlCommand("set names gb2312", con);
cmd.Connection = con;
cmd.ExecuteNonQuery();
3,在连接数据库的时候指定Charset属性,这也是我做项目时候的问题所在。参考代码如下:
string connstr = "server=" + servername + ";database=" + dbname + "; user id=" + userinfo + "; password=" + pwdinfo + ";pooling=false;Charset=gb2312";
4,把数据库,表,中文字段都设置成统一的编码集。我的都设置成了gb2312
经过以上的一些修改,问题就会基本得到解决,其中第三步是容易疏忽的,也是很多时候的问题所在。希望本篇日志对大家有所帮助!