利用编程语言向mysql中插入中文出现乱码的问题

       最近在做项目的时候,用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

      经过以上的一些修改,问题就会基本得到解决,其中第三步是容易疏忽的,也是很多时候的问题所在。希望本篇日志对大家有所帮助!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值