2009-06-09 113 views
1

我有一个使用mySQL数据库编写的ASP网站。 ASP使用ODBC 5.1驱动程序连接到数据库。在数据库内部有一个varchar(8000)列(长度从小开始,但应用程序自从构思以来已经进化了很多)。无论如何,最近很明显,varchar列应该更改为MEDIUMTEXT列。我做了改变,一切都显得很好。但是,每当我执行UPDATE语句时,该列中的数据就会被损坏。对于网站的性质,我无法提供数据或示例查询,但查询不使用任何功能或任何内容;只是一个更新。使用MediumText和ASP/MySQL数据损坏

一切工作正常与varchar,但当我使该字段MEDIUMTEXT炸毁。我所说的腐​​败如下:

ڹ   ߘ ߘ 

任何想法?

+0

你怎么得到那个输出?通过代码或查询分析器/企业管理器? – NoCarrier 2009-06-09 20:22:38

+0

ASP和phpMyAdmin都显示乱码。我没有使用分析器或企业管理器.... – SpaDusA 2009-06-10 14:20:44

回答

0

你检查过编码(ASP + HTML + DB)吗?使用UTF8?

不使用UTF8,文本不是英文,对不对?

+0

我没有检查,我没有使用UTF8 – SpaDusA 2009-06-29 14:26:47

0

您可能有版本特定的错误。我搜索了“mysql alter table mediumtext corruption”,并且有一些特别与代码页和非latin1字符集有关的bug。

最好的办法是对表格进行调查,并将其与备份进行比较。如果这是MyISAM表,您可能需要使用CHECKSUM option enabled重新创建表。 CHECK TABLE告诉你什么?如果ALTER TABLE不为你工作,你可以考虑分割MEDIUMTEXT场到它自己的表,或复制使用INSERT的变化表内容... SELECT:

CREATE TABLE b LIKE a; 
ALTER TABLE b MODIFIY b.something MEDIUMTEXT; 
INSERT INTO b SELECT * FROM a LIMIT x,1000; 
-- now check those 1000 rows -- 

通过插入几一次一行,然后检查它们,你可能会弄清楚什么样的输入不能很好地转换。

检查dmesg和syslog输出以查看是否存在内存或磁盘问题。我看到由于ECC错误,坏RAID控制器,坏扇区和网络传输错误而导致表损坏。您可以在类似的机器上尝试ALTER TABLE并查看它是否检出。