• 使用EF操作Mysql数据库中文变问号的解决方案


    问题场景:使用Entity Framework 6.0 操作Mysql数据库,中文保存至数据库后全部变成问号。但是使用Mysql API却不会。

    原因排查:首先想到的肯定是数据库编码问题,一次查询了表、字段的编码,发现都是UTF8,这就说明表及字段的编码没有问题。第二步,查看数据库的编码:

    show VARIABLES like 'char%';

              结果:

                  

              果然如我们所料,数据库的编码是默认的latin1编码,而不是utf-8。

    解决方案:1、首先想到的可能是修改数据库的编码,具体的修改方法参考博文:http://www.cnblogs.com/houqi/p/5713176.html 。

              2、因为前文我们提到过,使用Mysql API可以正常插入中文,为什么会这样呢?我去检查了一下Mysql的数据库连接字符串:

    <add key="ConnectionString" value="server=127.0.0.1;Uid=root;Pwd=******;Database=shove_scs;port=3306;charset=utf8;Allow User Variables=True"/>

                 我们可以发现,里面的charset=utf8就是指定了操作数据库所使用的编码。由此我们想到,我们是不是可以在EF的链接字符串中同样的添加编码呢。试试:

    <add name="Entities" connectionString="metadata=res://*/EdmxModel.SnapsModel.csdl|res://*/EdmxModel.SnapsModel.ssdl|res://*/EdmxModel.SnapsModel.msl;
         provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=******;persistsecurityinfo=True;Character Set=utf8;
         database=shove_scs&quot;" providerName="System.Data.EntityClient"/>

                 测试发现确实有效。这就说明添加编码确实可以解决乱码问题。

    解决方案2参考文章:http://blog.sina.com.cn/s/blog_4c8b1bdd0102vpal.html

  • 相关阅读:
    Philosophy is systematic reflective thinking on life.
    HashMap与HashTable的区别、HashMap与HashSet的关系
    android Intent机制详解
    Android Parcelable理解与使用(对象序列化)
    Java并发编程:volatile关键字解析
    JavaEE 对象的串行化(Serialization)
    pytorch学习
    numpy的一些用法
    约瑟夫问题
    双向链表及其操作
  • 原文地址:https://www.cnblogs.com/wangwust/p/6806065.html
Copyright © 2020-2023  润新知