| Users |
|---|
доброго
Написал функцию с входным параметром типа varchar. Передаю в нее число - сталкиваюсь с тем, что вместо ошибки - mysql спокойно преобразовывает 1 в '1'.
Окей, изучаю вопрос, лезу в my.ini, вижу:
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Так вот, установка какого параметра мне здесь нужна, чтобы никаких НЕЯВНЫХ преобразований не делалось? Пока ничего из того, что написано в документации, не помогло, при этом рестарт сервера, разумеется, делался. Размечтался было, что параметр MSSQL даст привычное поведение - ан нет.
Вопрос номер два. Допустим, что отключить бред с неявным преобразованием - невозможно. Тогда, хрен с ним, надо просто проверять, не является ли входной параметр числом. Но и здесь меня ждал сюрприз select 'asdfa' / 1; - прекрасно отрабатывает. Ребята! Как можно делить строку на число и не получить при этом ошибку?!
Есть в mysql что-то типа ISNUMBER? Это как раз проверка, что переданная переменная - число. |
Тут еше хуже, поведение мускл меняется от версии кв ерсии!
вот в этом старом топике обсуждалось всякие сюрпризы типа
разного поведения IF(1='1',2,3), IF(1='a1',2,3), IF(0='a1',2,3) и других неявных преобразований
в разных версиях.
помогите составить запросПосмотрите -- может CAST даст некую стабильность. Или выбросит ошибку на
строке (чиста предположение, может неверное).
Вообше, если такое случается то надо подумать более серьезно про
чистоту данных, если нужно ТОЛЬКО число, то
лучше и тип колонки дать численый.
Можно разово и на входе чистить проверять.
Если в базу уже вошли нечистые данные, то
потом на них все время будут натыкатся разные запросы...