Я использую MySQL в строгом режиме ( SET sql_mode = 'STRICT_TRANS_TABLES'
) для преобразования всех предупреждений в ошибки. Однако у меня есть запрос, который ожидается для создания предупреждений, потому что он пытается преобразовать поле VARCHAR
, которое может быть пустым или содержать буквы, в целое число.
Пример:
mysql> select CAST("123b" AS SIGNED);
+------------------------+
| CAST("123b" AS SIGNED) |
+------------------------+
| 123 |
+------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '123b' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)
Есть ли способ подавить предупреждение, вызванное CAST ()
, без отключения строгого режима ? Или же можно отключить строгий режим для отдельного запроса или функции (что-то вроде оператора @
в PHP) без вызова SET
] дважды, чтобы временно отключить строгий режим?
Предыстория: у меня есть таблица с номерами домов. Большинство из них числовые, но некоторые содержат буквы в конце. Чтобы реализовать упрощенную «естественную сортировку», я хотел бы использовать ORDER BY CAST (StreetNr AS SIGNED), StreetNr
, и значение, возвращаемое CAST (), было бы хорошо для сортировки 1-го уровня.