Я реализовал большую часть кода Zend_Db
в Zend Framework.
Как уже отмечалось, причина того, что Zend_Db
возвращает строки вместо собственных целых чисел или чисел с плавающей запятой, заключается в том, что расширения базы данных PHP возвращают строки. И причина этого в том, что не может быть собственного типа PHP для представления определенного типа базы данных.
Например, MySQL BIGINT
- это 64-разрядное целое число со знаком. По умолчанию тип PHP int
ограничен 32-разрядными значениями, поэтому, если вы извлекаете данные из базы данных и неявно преобразуете их в int
, некоторые значения могут быть усечены. Есть несколько других подобных случаев для float
и дат и т. Д.
Использование строкового представления для всех типов данных - это лучший способ оставаться простым и непротиворечивым, быть уверенным в том, что можно избежать потери данных и избежать написания большого количества специфического для конкретного поставщика кода для отображения типов данных. Этот дополнительный код также повлечет за собой снижение производительности.
Таким образом, если у вас есть конкретные случаи, когда вам нужно сопоставить результаты базы данных с собственными типами данных PHP, вы должны реализовать их самостоятельно в коде приложения (например, в пользовательском Zend_Db_Table_Row
классе).