Странности при поиске по ID (SQL)

D
На сайте с 28.06.2008
Offline
1101
226

 запрос

SELECT * FROM tvr WHERE tid = '2951871-2323'

выдает товар с tid = 2951871, а я ожидал пустоту. 

Запрос

SELECT * FROM tvr WHERE tid = 2951871-2323

выдает товар с tid =  2949548, тут я вообще без понятия что происходит.

Запрос 

SELECT * FROM tvr WHERE tid = 2951871  или SELECT * FROM tvr WHERE tid = "2951871"

проходит штатно.

Что за магия в первых двух вариантах? tid - Тип поля int, первичный ключ есть

temniy
На сайте с 15.03.2008
Offline
235
#1
Dram :

Запрос

SELECT * FROM tvr WHERE tid = 2951871-2323

выдает товар с tid =  2949548, тут я вообще без понятия что происходит.

Происходит операция вычитания.

Если нужно искать именно номер как в первом варианте, используйте LIKE

SELECT * FROM tvr WHERE tid LIKE '2951871-2323'

А вообще при таком значении почему у вас тип поля int? 

⭐ Лучший хостинг от 4 евро, VPS от 6 евро, VPN недорого - разные локации - любые карты - скидки до 20% - https://fornex.com/c/ffi2e3/ru/services/
D
На сайте с 02.02.2010
Offline
132
#2

если int, то mysql и обработает запрос как число, т.е  в запросе будет 2951871

echo (int)'2951871-2323'; //2951871

D
На сайте с 28.06.2008
Offline
1101
#3
Понял, спс!
C
На сайте с 04.02.2005
Offline
277
#4
MySQL :: MySQL 8.0 Reference Manual :: 12.3 Type Conversion in Expression Evaluation
  • dev.mysql.com
When an operator is used with operands of different types, type conversion occurs to make the operands compatible. Some conversions occur implicitly. For example, MySQL automatically converts strings to numbers as necessary, and vice versa. It is also possible to convert a number to a string explicitly using the function. Conversion occurs...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий