2009-06-09 8 views
1

J'ai un site web écrit en ASP avec une base de données mySQL. ASP utilise le pilote ODBC 5.1 pour se connecter à la base de données. Dans la base de données il y a une colonne varchar (8000) (la longueur a commencé petit, mais l'application a beaucoup évolué depuis sa conception). Quoi qu'il en soit, il est récemment devenu évident que la colonne varchar devrait être changée en une colonne MEDIUMTEXT. J'ai fait le changement et tout est apparu bien. Cependant, chaque fois que je fais une instruction UPDATE, les données dans cette colonne pour cette ligne spécifique sont corrompues. Faire à la nature du site Web, je suis incapable de fournir des données ou des exemples de requêtes, mais les requêtes n'utilisent aucune fonction ou quoi que ce soit; juste une mise à jour droite.Corruption de données avec MediumText et ASP/MySQL

Tout fonctionne bien avec le varchar, mais exploser quand je fais le champ MEDIUMTEXT. La corruption dont je parle est la suivante:

ڹ    ߘ ߘ 

Des idées?

+0

comment obtenez-vous cette sortie? via code, ou analyseur de requête/gestionnaire d'entreprise? – NoCarrier

+0

ASP et phpMyAdmin montrent tous les deux ce charabia. Je n'utilise pas d'analyseur ou de gestionnaire d'entreprise .... – SpaDusA

Répondre

0

Avez-vous vérifié les encodages (ASP + HTML + DB)? En utilisant UTF8?

Vous n'utilisez pas UTF8 et ce texte n'est pas anglais, n'est-ce pas?

+0

J'ai vérifié et je n'utilise pas UTF8 – SpaDusA

0

Vous avez peut-être un bogue spécifique à la version. J'ai cherché "mysql alter table mediumtext corruption" et il y avait quelques bugs concernant spécifiquement les pages de code et les jeux de caractères non-latin1.

Le mieux est de faire une étude de la table, en la comparant à une sauvegarde. S'il s'agit d'une table MyISAM, vous pouvez recréer la table avec CHECKSUM option enabled. Que vous dit une TABLE DE CONTRÔLE? Si une commande ALTER TABLE ne fonctionne pas pour vous, vous pourriez envisager de diviser le champ mediumtext dans sa propre table, ou de dupliquer le contenu de la table à l'aide d'une variation d'une instruction 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 -- 

En insérant quelques lignes à la fois, puis en les vérifiant, vous pourriez être en mesure de démêler quel type d'entrée ne convertit pas bien.

Vérifiez la sortie dmesg et syslog pour voir si vous avez des problèmes de RAM ou de disque. J'ai vu des corruptions de table se produire en raison d'erreurs ECC, de mauvais contrôleurs de raid, de mauvais secteurs et d'une mauvaise transmission réseau. Vous pouvez essayer ALTER TABLE sur une machine comparable et voir si elle vérifie.

Questions connexes