Ваш пра-пра-пра-пра-прадед должен обновить до SQL Server 2008 и использовать тип данных DateTime2 , который поддерживает даты в диапазоне: от 0001-01-01 до 9999-12-31.
На странице руководства MySQL для строк указано:
\ 0
Символ ASCII NUL (0x00). \ '
Один символ кавычки (« '
»). \ "
Символ двойной кавычки (« »
»). \ b
Символ возврата. \ n
Символ новой строки (перевода строки). \ r
Символ возврата каретки. \ t
Знак табуляции. \ Z
ASCII 26 (Control-Z). См. Примечание после таблицы. \\
Символ обратной косой черты (« \
»). \%
Символ «%
». См. Примечание после таблицы. \ _
Символ « _
». См. Примечание после таблицы. Внесение в черный список (выявление плохих символов) никогда не поможет, если у вас есть другие варианты.
Вам нужно использовать сочетание белого списка и, что более важно, подходов с привязанными параметрами .
Хотя этот конкретный ответ фокусируется на PHP, он по-прежнему очень помогает и поможет объяснить, что простое выполнение строки через фильтр символов во многих случаях не работает. Пожалуйста, см. Защищают ли htmlspecialchars и mysql_real_escape_string мой PHP-код от внедрения?
Предположение относительно символа возврата: представьте, что я отправляю вам электронное письмо «Привет, вот запрос на обновление вашей БД, как вы хотели» и прикрепленный текстовый файл с
INSERT INTO students VALUES ("Bobby Tables",12,"abc",3.6);
. убедитесь, что все в порядке, и просто передайте файл в MySQL. Однако вы не знали, что я поставил
DROP TABLE students;\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b
перед INSERT STATEMENT, которого вы не видели, потому что при выводе на консоль backspaces перезаписали его. Бамм!
Только предположение.
Edit (не удержался):