У меня есть столбец VARCHAR (4), который получает данные от ввода, который может быть выше 4 символов. Это нормально, и я позволил MySQL естественно (или так я думал) отрезать конец символов.
Как ни странно, когда я просматриваю результаты строки базы данных позже в PHP (используя драйвер PDO), отображается вся строка, а не только 4 символа.
Что странно, если я делаю запрос SELECT в MySQL CLI, он возвращает только 4 символа. Даже когда я делаю mysqldump, отображаются только 4 символа.
Любая идея, что может вызвать эту странную несогласованность?
Обратите внимание, что эти символы – все числа.
Изменить: по запросу, вот какой psuedocode, который представляет методы save / fetch:
Хранение:
$data = array( 'name_first4' => $fields['num'], // name_first4 is the column name with VARCHAR(4) ); $where = $this->getTable()->getAdapter()->quoteInto('id = ?', $id); $this->getTable()->update($data,$where);
Извлечение, используя Zend_Db_Table:
$row = $this->getTable()->fetchRow( $this->getTable()->select()->where('id=?',$data) );
Если вы это делаете:
$o
. '12345'
соответствующему свойству / столбцу. $o
и позвольте MySQL усекать значение до '1234'
. $o
и получите '12345'
назад. то вы видите одну из проблем, позволяющих вашей базе данных беззвучно калечить ваши данные.
Сохранение выполнено успешно, ваш объект не знает, что MySQL усекает данные, поэтому он поддерживает '12345'
а не перезагружает этот столбец из базы данных, и у вас есть непоследовательные данные на ваших руках.
Если вы зависите от MySQL, тихо усекая ваши данные, вам, вероятно, придется это сделать:
Я бы рекомендовал добавлять строгие проверки к вашим объектам, чтобы избежать молчаливого усечения внутри MySQL. Включение строгого режима также позволит избежать этой проблемы, но тогда вам нужно будет рассмотреть и затянуть всю обработку ошибок и проверку данных (что не было бы очень плохо).