如果您尝试将值插入到不适合的VARCHAR中,MySQL会发生什么?

时间:2015-11-12 01:14:30

标签: php mysql sql

我有一个像

这样的功能
function log_visitor_info ( $ip, $pgurl, $refurl, $aginfo )
{
    global $wpdb, $ipsToIgnore; 
    if (!in_array($ip, $ipsToIgnore)) $wpdb->insert('wp_nas_visits',  array('ip'=>$ip,'refurl'=>$refurl,'pgurl'=>$pgurl,'aginfo'=>$aginfo));
}

将行插入我的MySQL数据库,并想知道如果有一个值要输入到列中,会发生什么。例如,列aginfo的类型为VARCAHR (250),那么如果字符串$aginfo的长度为251,会发生什么?我的网站会崩溃吗?我是否需要通过执行类似

的操作来防止这种情况发生
if ( strlen($aginfo) > 250 ) $aginfo = substr($aginfo, 0, 250); 

要防范这个?

1 个答案:

答案 0 :(得分:2)

如果未启用严格SQL模式,并且您为CHAR或VARCHAR列分配的值超出了列的最大长度,则会截断该值以使其适合并生成警告。对于非空格字符的截断,可以导致发生错误(而不是警告),并通过使用严格的SQL模式来禁止插入值。 https://dev.mysql.com/doc/refman/5.7/en/char.html