Как MySQL / MariaDB может незаметно изменять значения при сохранении - PullRequest
1 голос
/ 18 июня 2020

Я ищу в MySQL / MariaDB случаи, когда значение, передаваемое при сохранении, будет отличаться от значения, которое можно получить позже. Меня интересуют только поля с недвоичными строковыми типами данных, такими как VARCHAR и * TEXT .

Я хотел бы получить более полное представление о том, как можно доверять хранимой ценности. Это было бы особенно интересно для случаев, когда в выводе просто отсутствуют определенные символы (например, в примере с escape-символом ниже), поскольку это особенно опасно при проверке.

Итак, это сводится к: Можете ли вы создать строку ввода (и / или определить среду), в которой она не выводит <value> во втором выражении?

INSERT INTO t SET v = <value>, id = 1; // success
SELECT v FROM t WHERE id = 1;

То, что я могу придумать:

  • строки, содержащие экранирование (\aa)
  • усекаются, если слишком длинные
  • кодировка символов таблицы, не поддерживающей ввод

Если что-то не работает тихо, вероятно, это также зависит от того, насколько строго установлен режим SQL (как в последних двух примерах).

Заранее большое спасибо за ваш вклад!

1 Ответ

1 голос
/ 18 июня 2020

вы можете быть уверены в том, что все базы данных выполняют то, что цели стандартов, со строками и целыми числами, это просто, потому что оно сохраняет двоичное представление этого числа или символа в выбранном вами наборе символов.

Decimal Double и отдельные значения различаются, потому что их нельзя сохранить напрямую, и поэтому речь идет о фракталах, см. десятичное представление

Это также соответствует стандартам, но вы должны учитывать это.

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