Повреждение данных с помощью MediumText и ASP / MySQL - PullRequest
1 голос
/ 09 июня 2009

У меня есть сайт, написанный на ASP с базой данных mySQL. ASP использует драйвер ODBC 5.1 для подключения к базе данных. Внутри базы данных есть столбец varchar (8000) (длина началась с малого, но приложение разработало ОЧЕНЬ много с момента его создания) Во всяком случае, недавно стало очевидно, что столбец varchar следует заменить на столбец MEDIUMTEXT. Я сделал изменения, и все оказалось в порядке. Однако всякий раз, когда я делаю инструкцию UPDATE, данные в этом столбце для этой конкретной строки повреждаются. Что касается характера веб-сайта, я не могу предоставить данные или примеры запросов, но запросы не используют какие-либо функции или что-либо; просто прямое ОБНОВЛЕНИЕ.

Все отлично работает с varchar, но взрывается, когда я делаю поле MEDIUMTEXT. Коррупция, о которой я говорю, выглядит следующим образом:

ڹ ߘߘ

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2009

У вас может быть ошибка, связанная с версией. Я искал "mysql alter table повреждение среднего текста", и были некоторые ошибки, связанные с кодовыми страницами и наборами нелатинских символов.

Лучше всего провести опрос таблицы, сравнив ее с резервной копией. Если это таблица MyISAM, возможно, вы захотите воссоздать таблицу с включенной опцией CHECKSUM . Что говорит вам CHECK TABLE? Если у вас не работает ALTER TABLE, вы можете подумать о том, чтобы разделить поле со средним текстом в его собственную таблицу или дублировать содержимое таблицы, используя вариант 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, плохих контроллеров рейда, плохих секторов и неправильной передачи по сети. Вы можете попробовать ALTER TABLE на сопоставимой машине и посмотреть, проверяется ли она.

0 голосов
/ 18 июня 2009

Вы проверяли кодировки (ASP + HTML + DB)? Используете UTF8?

Не используется UTF8 и этот текст не на английском, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...