Используя кодовую базу Laravel, у меня есть два сервера, DEV env и PRODUCTION env, которые демонстрируют различную обработку одиночных и нулевых кавычек в запросе базы данных.
Версия MySQL в разработке
innobd_version: 5.5.50
protocal_version: 10
version: 5.5.50-0ubuntu0.14.04.1
version_compile_machine: x86_64
version_compile_os: debian-linux-gnu
MariaDB в работе
innodb_version: 5.5.61-MariaDB-38.13
protocol_version: 10
version: 5.5.64-MariaDB
version_comment: MariaDB Server
version_compile_machine: x86_64
version_compile_os: Linux
Возьмем, к примеру, этот запрос к базе данных Laravel:
$records = table::all()->where('field_name', 1)->toArray();
' field_name ' на обоих серверах установлено как TINYINT (1) и будет 0 или 1.
На одном рабочем сервере работает вышеуказанный запрос (без одинарных кавычек).
Однако на сервере разработки он не работает (возвращает ноль результатов).
На флипна сервере разработки работает, если критерий where (1) заключен в одинарные кавычки:
$records = table::all()->where('field_name', '1')->toArray();
Но тогда эта версия в одинарных кавычках не работает в производственной среде.
Это неприятно, так как мне приходится оборачивать оператор в оператор флага if, поэтому он работает в обоих envs.
Это не просто один пример;это происходит в нескольких похожих местах в других таблицах / полях.
Я предполагаю, что это потому, что одна база данных - MySQL, а другая - MariaDB. Мне интересно, смогу ли я заставить их обоих работать последовательно. Я хочу, чтобы база данных разработки (MySQL 5.5.50) обрабатывала ее без одинарных кавычек. Однако я не уверен, с чего начать. Я приветствую любые советы о том, что может быть причиной этого, и как я могу заставить свой сервер разработки следовать последовательному поведению в рабочем состоянии.