Не хочу, чтобы mysql автоматически приводил String к Integer - PullRequest
0 голосов
/ 14 октября 2019

Я сталкивался с этой автоматической типизацией MYSQL из String в Integer, мне кажется странным.

mysql> select * from `isps` where `id` = '3ca6fb49-9749-3099-b30d-19ce56349ad6' OR `unique_id` = '3ca6fb49-9749-3099-b30d-19ce56349ad6';
+----+--------------------------------------+---------------+--------------+---------------------+---------------------+
| id | unique_id                            | name          | code         | created_at          | updated_at          |
+----+--------------------------------------+---------------+--------------+---------------------+---------------------+
|  3 | ee8db3be-1bf7-3440-8add-37232cfc4ecb | TTN           | ttn          | 2019-09-26 08:12:14 | 2019-09-26 08:12:14 |
|  7 | 3ca6fb49-9749-3099-b30d-19ce56349ad6 | ONE BROADBAND | onebroadband | 2019-09-26 08:12:14 | 2019-09-26 08:12:14 |
+----+--------------------------------------+---------------+--------------+---------------------+---------------------+

Я не ожидал результата с id = 3 , может кто-нибудь помочь с этим.

DataType в моей базе данных

id - BIGINT
unique_id - varchar(200)

1 Ответ

1 голос
/ 14 октября 2019

Вы можете привести id к строке перед сравнением.

select * from `isps` where CAST(`id` AS CHAR) = '3ca6fb49-9749-3099-b30d-19ce56349ad6' OR `unique_id` = '3ca6fb49-9749-3099-b30d-19ce56349ad6';

Обратите внимание, что это значительно замедлит запрос, поскольку он не сможет использовать индекс для idколонка.

...