我有一个用ASP编写的网站,带有mySQL数据库。 ASP使用ODBC 5.1驱动程序连接到数据库。在数据库中有一个varchar(8000)列(长度从小开始,但应用程序自从它的构思以来已经发展了很多)。无论如何,最近很明显varchar列应该变成MEDIUMTEXT列。我做了改变,一切都很顺利。但是,每当我执行UPDATE语句时,该列中该特定行的数据都会被破坏。对网站的性质,我无法提供数据或示例查询,但查询不使用任何功能或任何东西;只是一个直接的更新。
使用varchar一切正常,但是当我将字段设为MEDIUMTEXT时会爆炸。我所说的腐败如下:
ڹߘߘ
有什么想法吗?
答案 0 :(得分:0)
你检查过编码(ASP + HTML + DB)吗?使用UTF8?
不使用UTF8并且该文本不是英文,对吧?
答案 1 :(得分:0)
您可能有特定于版本的错误。我搜索了“mysql alter table mediumtext corruption”,并且有一些bug专门与代码页和非latin1字符集有关。
您最好的方法是对表格进行调查,并将其与备份进行比较。如果这是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输出,看看你是否有ram或磁盘问题。我已经看到由于ECC错误,raid控制器坏,坏扇区和错误的网络传输而发生表损坏。您可以在类似的计算机上尝试ALTER TABLE并查看它是否已检出。