mysql имеет автоматические, удобные преобразования числа в символ (и наоборот) в своем синтаксисе SQL-запроса, который ведет себя опасно.
рассмотрим таблицу с идентификатором пользователя varchar PK
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| userid | varchar(40) | NO | PRI | NULL | |
| cachetime | datetime | NO | | NULL | |
| outputjson | text | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
ошибка: любое число между 1538993648784210100 и 1538993648784210199, переданное как идентификатор пользователя, дает тот же результат.
mysql> select userid from test_cache where userid = 1538993648784210100;
+---------------------+
| userid |
+---------------------+
| 1538993648784210176 |
| 1538993648784210178 |
+---------------------+
Когда я явно окружаю идентификатор пользователя кавычками, оно работает и возвращает прямо сейчас для этих двух идентификаторов пользователей.