从MySql(ASP.NET)读取西里尔文

时间:2012-05-28 03:36:31

标签: php asp.net mysql

我有一个带表的MySql DB

CREATE TABLE `pp` (
[...]
`Title` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
[...]
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 

该表已由PHP填充,并且有一个可用的PHP脚本,可读取数据并将其写入网页。 PHP使用" windows-1251"编码并且工作正常。

服务器端的变量是:

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

我正在开发一个ASP.NET MVC3应用程序,该应用程序(除其他外)读取该数据并在windows-1251编码视图中显示它们。 我使用MySql .NET Connector v.6.5.4连接到数据库并读取数据。

问题是:生成的网页(即视图)上的西里尔文数据已损坏。

我尝试了各种连接字符串

charset=cp1251   or
charset=latin1   or
charset=utf8     

此外,我正在执行

SET NAMES cp1251   or 
SET NAMES latin1   or 
SET NAMES utf8      

在连接之后,但没有任何成功。

再说一次:在PHP中一切正常;在ASP.NET中没有。

我知道西里尔文本不应存储在latin1列中,并且PHP工作正常,因为cp1251和latin1都是每字符8位编码,并且没有数据转换。但我无法使用ASP.NET复制它。

请帮忙。

1 个答案:

答案 0 :(得分:0)

1将字段字符集更改为' cp1251'或者' utf8',例如 -

ALTER TABLE `pp`
  CHANGE COLUMN `Title` `Title` VARCHAR(255) CHARACTER SET cp1251 COLLATE cp1251_general_ci DEFAULT NULL;

2在插入或选择之前设置连接字符集 -

SET NAMES cp1251;

SET NAMES utf8;