2009-06-09 18 views
1

私はmySQLデータベースを使ってASPで書かれたWebサイトを持っています。 ASPはODBC 5.1ドライバーを使用してデータベースに接続します。データベースの内部にはvarchar(8000)の列​​があります(長さは小さくなっていますが、アプリケーションはその概念から大きく進化しています)。とにかく、varcharカラムをMEDIUMTEXTカラムに変更する必要があることが最近明らかになりました。私は変更を加え、すべてが問題なく現れた。ただし、UPDATE文を実行するたびに、その行のその列のデータが破損します。ウェブサイトの性質上、データやサンプルのクエリを提供することができませんが、クエリは関数などを使用していません。ちょうどまっすぐな更新。MediumTextとASP/MySQLによるデータ破損

すべてがvarcharで正常に動作しますが、フィールドをMEDIUMTEXTにすると爆発します。私が話している汚職は以下の通りです:

ڹ   ߘ ߘ 

アイデア?

+0

どうやって出力していますか?コード経由、またはクエリアナライザ/エンタープライズマネージャ? – NoCarrier

+0

ASPとphpMyAdminの両方がその不気味さを示しています。私はアナライザーやエンタープライズマネージャーを使用していません.... – SpaDusA

答えて

0

エンコード(ASP + HTML + DB)を確認しましたか? UTF8を使用していますか?

UTF8を使用していないテキストは英語ではありません。

+0

私はチェックしたと私はUTF8を使用していない – SpaDusA

0

バージョン固有のバグがある可能性があります。私は "mysql alter table mediumtext corruption"を検索しました。特に、コードページや非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の出力を調べて、ラムまたはディスクの問題があるかどうかを確認してください。私は、ECCエラー、不正なRAIDコントローラ、不良セクタ、および障害のあるネットワーク伝送のためにテーブルの破損が発生するのを見ました。同等のマシンでALTER TABLEを実行し、チェックアウトしているかどうかを確認することができます。