Это имеет значение в том, как драйвер базы данных ( т.е. php) отправляет данные в вашу СУБД. При связывании типа данные сначала приводятся к указанному типу c, а затем отправляются по проводам в вашу СУБД. Например, допустим, что значение, которое вы указали в PHP, является строкой "9223372036854775808"
. Если вы связываете его как строку, данные отправляются в СУБД в виде строки, и СУБД может выполнять любое внутреннее преобразование, необходимое для упаковки и сохранения значения в указанном типе столбца. Однако, если вы связываете его как целое число, то PHP - это тот, кто первым выполняет приведение перед отправкой по проводам. Это означает, что значение сначала становится (int) "9223372036854775808"
, что приводит к значению 9223372036854775807
, а затем упаковывается как двоичная полезная нагрузка 0xffffffff
. В результате СУБД будет принимать данные без изменений.
Это, конечно, создает различные побочные эффекты. Например, целочисленный размер (32 бита против 64 бита против произвольной точности) может варьироваться в зависимости от того, кто контролирует операции приведения и упаковки. Более того, ответственность за проверку целочисленного переполнения / точности переноса ложится на сторону того, кто выполняет приведение и упаковку ( драйвер по сравнению с СУБД ). Дополнительные побочные эффекты включают размер полезной нагрузки, которая идет по проводам. Строка больше, чем упакованное двоичное целое число.
В идеале в данном случае важна специфичность. Потому что в основном база данных может общаться только с php, отправляя все в виде строки. Хотя драйвер может принимать более разумные решения о том, как представлять эти данные внутри PHP (что должно иметь значение для программиста), учитывая более точное c представление о том, как эти данные связаны между двумя концами .