Index: src/wp-includes/wp-db.php
===================================================================
--- src/wp-includes/wp-db.php	(revision 42030)
+++ src/wp-includes/wp-db.php	(working copy)
@@ -1208,7 +1208,7 @@
 	 * This method DOES NOT support sign, padding, alignment, width or precision specifiers.
 	 * This method DOES NOT support argument numbering or swapping.
 	 *
-	 * Arguments may be passed as individual arguments to the method, or as a single array containing all arguments. A combination 
+	 * Arguments may be passed as individual arguments to the method, or as a single array containing all arguments. A combination
 	 * of the two is not supported.
 	 *
 	 * Examples:
@@ -2064,7 +2064,7 @@
 		$conditions = implode( ' AND ', $conditions );
 
 		$sql = "UPDATE `$table` SET $fields WHERE $conditions";
-		
+
 		$this->check_current_query = false;
 		return $this->query( $this->prepare( $sql, $values ) );
 	}
@@ -2156,6 +2156,21 @@
 		$converted_data = $this->strip_invalid_text( $data );
 
 		if ( $data !== $converted_data ) {
+			$problem_fields = array();
+
+			foreach ( $data as $field => $value ) {
+				if ( $value !== $converted_data[ $field ] ) {
+					$problem_fields[] = $field;
+				}
+			}
+
+			if ( count( $problem_fields ) === 1 ) {
+				$message = __( 'WordPress Database Error: Processing the value for the following field failed, the supplied value may have been too long or contained invalid data: %s.' );
+			} else {
+				$message = __( 'WordPress Database Error: Processing the values for the following fields failed, the supplied values may have been too long or contained invalid data: %s.' );
+			}
+
+			$this->last_error = sprintf( $message, implode( ', ', $problem_fields ) );
 			return false;
 		}
 
Index: tests/phpunit/tests/db.php
===================================================================
--- tests/phpunit/tests/db.php	(revision 42030)
+++ tests/phpunit/tests/db.php	(working copy)
@@ -939,6 +939,41 @@
 	}
 
 	/**
+	 * @ticket 32315
+	 */
+	function test_process_fields_too_long() {
+
+		global $wpdb;
+
+		$data = array( 'post_status' => str_repeat( 'a', 21 ) );
+
+		$this->assertFalse( self::$_wpdb->process_fields( $wpdb->posts, $data, null ) );
+		$this->assertSame(
+			'WordPress Database Error: Processing the value for the following field failed, the supplied value may have been too long or contained invalid data: post_status.',
+			self::$_wpdb->last_error
+		);
+	}
+
+	/**
+	 * @ticket 32315
+	 */
+	function test_process_fields_too_long_multiple() {
+
+		global $wpdb;
+
+		$data = array(
+			'post_status' => str_repeat( 'a', 21 ),
+			'post_type'   => str_repeat( 'a', 21 ),
+		);
+
+		$this->assertFalse( self::$_wpdb->process_fields( $wpdb->posts, $data, null ) );
+		$this->assertSame(
+			'WordPress Database Error: Processing the values for the following fields failed, the supplied values may have been too long or contained invalid data: post_status, post_type.',
+			self::$_wpdb->last_error
+		);
+	}
+
+	/**
 	 * @ticket 15158
 	 */
 	function test_null_insert() {
