运行环境:
服务器:虚拟主机
数据库:Mysql 5.0
asp.net版本:2.0
开发环境:
服务器:本地 IIS 7.0
数据库:Mysql 5.1
数据库驱动:Mysql Connector/.Net 6.3.5.0
asp/net版本:2.0
问题一:
发布后上线,web.config中"<add assembly="MySql.Data, Version=6.3.5.0,Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>"报错。
我的解决方案:
在工程目录下新建“bin”目录,将在网上下载“MySql.Data.dll”以及“MySql.Web.dll”文件引入到该目录,并相应地修改web.config文件中报错节点的版本号。问题解决。
注:我所理解的是这种方法其实是解决了在没有安装mysql-connector或者忽略已安装的mysql-connector环境中,在asp.net与mysql之间建立连接。
问题二:
老生常谈的中文乱码问题:理想的编码格式为UTF-8,数据库中文本字段以及页面均已设置为UTF-8,在web.config中,也已经添加了<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>,但是依然出现中文乱码问题。并且,通过mysql管理工具执行与页面中相同的插入语句时,数据库中编码正确。页面从数据库中读取时,编码也没有问题。仅仅在于由页面向数据库中写入的时候会发生问题。
我的解决方案:
1,通过mysql管理工具检查数据库字符集:"mysql> SHOW VARIABLES LIKE 'character_set_%';",结果显示character_set_database 编码为lantin1而非理想中utf8;
2,通过mysql管理工具检查数据库排序方式:“mysql> SHOW VARIABLES LIKE 'collation_%'; ”,结果显示collation_database为 latin1_swedish_ci 而非理想中的utf8
3,通过mysql管理工具更改默认字符集:“alter database 我的数据库名称 default character set 'utf8'.”,然后再检查字符集和排序方式确认正确。
4,修改connection字串,增加charset属性:"server=*;user id=*;password=*;database=*;charset=utf8";
5,再次确认web.congif中字符集节点:“<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>”。
至此,该问题解决。
注:我理解的这个问题是页面编码以及数据库编码的一致性问题,要想数据能够在这两者之间无差错的流动,就要将二者的编码一致,若不一致,则需要第三方进行转换。由于在建立表时,指定了文本字段的编码,导致忽略了字符集以及排序方式的默认编码,导致了中文乱码问题。所以,本方法的重点在于:详细地确认每个环节的编码,确保它们之间能够无差错地识别。
后记:
在整个解决问题的过程中,这几个问题本身并不很麻烦,最大的难点在于操作远程web服务器及数据库服务器,由于是人家的主机,所以不能像在本地调试一样随意地更改环境配置来适应整个项目的需要。但是既然人家敢于只给你这么一点权限,那么这么一点权限就肯定能够解决这些遇到的问题的,所以请不要不耐烦,一点点地去发现问题,解决问题。