【发布时间】:2012-05-28 03:36:30
【问题描述】:
我有一个带表的 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 复制它。
请帮忙。
【问题讨论】:
-
为什么要设置这个:
Titlevarchar(255) CHARACTER SET latin1 DEFAULT NULL, ?可能是你需要设置 CHARACTER SET cp1251 -
数据库已经在生产中,所以我无法更改它。我的 ASP.NET 代码应该只从该数据库中读取。还有很多其他工作的 PHP 代码可以插入/删除/修改数据库数据。