Повреждение вставки MySQL

Мы пытаемся извлечь данные из MS SQL Server с помощью драйвера FreeTDS для PDO и вставить их в таблицу MySQL. Однако, кажется, что одна запись заполняется правильными данными, за которыми следует строка ненужных символов и даже части других запросов. Мы смогли выполнить репликацию, повторно импортировав одну и ту же запись, и каждый раз она включала разные ненужные данные.

Кто-нибудь еще сталкивался с таким странным поведением? Что может вызвать это?

Код в основном сводится к выбору полей NVARCHAR из SQL Server и вставке его в поля VARCHAR в MySQL. Например:

SQL Server:

SELECT ItemName FROM Items;

возвращает ‘gat43C4533’

MySQL:

INSERT INTO Items (ItemName) VALUES ('gat43C4533');

результат в таблице MySQL

gat43?4533 -*[$%^&^%#$^%&]                . CASE WHEN GHYT.Test...

Есть ли способ, которым PDO может выдать какой-либо тип ошибки или изящно обработать это, не заполняя поле ненужным?

Есть ли способ, которым это может быть ошибка в MySQL или FreeTDS? Никто не учел тот факт, что появляется случайный код SQL. Поскольку кажется, что он пытается вставить некоторые нечитаемые данные, может ли быть какая-то проблема с памятью, когда данные возвращаются из некоторой случайной области памяти? Или есть повреждение памяти?

2

Решение

попробуйте использовать это, чтобы очистить строку перед вставкой.
он удалит специальные символы, которые невозможно увидеть, например \ n

function clean($string) {
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.

return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}
1

Другие решения

Итак, я выяснил, в чем проблема.

Символ, вызвавший ошибку, был кириллицей C.

Соединение PDO с MySQL не указывало кодировку UTF-8, поэтому я добавил:

$PDOconnection->exec("set names utf8");

Это позволило добавить специальный символ без проблем.

Случайные данные SQL и ненужные данные, которые отображались в терминале, вероятно, были вызваны тем, что во вставленной строке был символ EOT.

0

По вопросам рекламы [email protected]