Mysql 字符串数据,右截断:1406数据对列太长

Mysql 字符串数据,右截断:1406数据对列太长,mysql,mariadb,Mysql,Mariadb,我遇到的问题是,我收到以下错误,我进入MySql并运行: ALTER TABLE block_content__field_views_reference_book MODIFY COLUMN field_views_reference_book_target_id varchar(500); 要将其从varchar(5)改为varchar(5),但仍然得到下面的错误,有什么建议吗?我错过了什么 Drupal\Core\Entity\EntityStorageException:SQLSTA

我遇到的问题是,我收到以下错误,我进入MySql并运行:

ALTER TABLE block_content__field_views_reference_book 
MODIFY COLUMN field_views_reference_book_target_id varchar(500);
要将其从varchar(5)改为varchar(5),但仍然得到下面的错误,有什么建议吗?我错过了什么

Drupal\Core\Entity\EntityStorageException:SQLSTATE[22001]:字符串数据,右截断:第1行“field\u views\u reference\u book\u target\u id”列的1406数据过长:插入到{block\u content\u r\u e6f3906112}(实体id、修订id、捆绑、增量、语言代码、字段视图、参考书籍、目标id、字段视图、参考书籍、显示id、字段视图、参考书籍、数据)值(:db_insert_placeholder_0,:db_insert_placeholder_1,:db_insert_2,:db_insert_placeholder_3,:db_insert_placeholder_4,:db_insert_placeholder_5,:db_insert_placeholder_6,:db_insert_placeholder_7);数组([:db_insert_placeholder_0]=>46[:db_insert_placeholder_placeholder_1]=>339[:db_insert(hp placeholder]=>0[:db\u insert\u placeholder\u 4]=>en[:db\u insert\u placeholder\u 5]=>book[:db\u insert\u placeholder\u 6]=>block\u 1[:db\u insert\u placeholder\u 7]=>a:5:{s:6:“偏移量”;N;s:5:“分页器”;N;s:5:“限制”;N;s:5:“标题”;N;s:8:“参数”;N})在Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()(core/lib/Drupal/core/Entity/Sql/SqlContentEntityStorage.php的第846行)

显示创建表的结果:

CREATE TABLE `block_content__field_views_reference_book` (
  `bundle` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The field instance bundle to which this row belongs, used when deleting a field instance',
  `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT 'A boolean indicating whether this data item has been deleted',
  `entity_id` int(10) unsigned NOT NULL COMMENT 'The entity id this data is attached to',
  `revision_id` int(10) unsigned NOT NULL COMMENT 'The entity revision id this data is attached to',
  `langcode` varchar(32) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The language code for this data item.',
  `delta` int(10) unsigned NOT NULL COMMENT 'The sequence number for this data item, used for multi-value fields',
  `field_views_reference_book_target_id` varchar(250) NOT NULL,
  `field_views_reference_book_display_id` varchar(250) CHARACTER SET ascii DEFAULT NULL COMMENT 'The ID of the display.',
  `field_views_reference_book_data` longtext DEFAULT NULL COMMENT 'Serialized data.',
  PRIMARY KEY (`entity_id`,`deleted`,`delta`,`langcode`),
  KEY `bundle` (`bundle`),
  KEY `revision_id` (`revision_id`),
  KEY `field_views_reference_book_display_id` (`field_views_reference_book_display_id`),
  KEY `field_views_reference_book_target_id` (`field_views_reference_book_target_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Data storage for block_content field field_views_reference…' |

什么版本?什么
字符集
?以及其他问题。在5.5版本之前,有
字符集utf8
,每个字符最多需要3个字节,但不是
utf8mb4
,它最多需要4个字节。5.7(10.2?)解决了问题。同时,索引被限制为767个字节;不是3072

VARCHAR(500)
上的索引需要1500或2000字节

下面是我可以做的5件事的清单:


您需要根据您可以容忍的缺陷从中进行选择。

这是我尝试过的,对于drupal 8来说,它是有效的。

  ALTER TABLE node_field_data MODIFY title VARCHAR(500);
 ALTER TABLE node_field_revision MODIFY title VARCHAR(500);

更改后请提供表结构。请使用
SHOW CREATE table block\u content\u field\u views\u reference\u book;
it@SlavaRozhnev编辑并添加了对原始问题的回答。如您所见,
字段\视图\参考\书籍\目标\ id
栏为varchar(250)不为空。您试图插入此列的数据是什么?我再次查看了错误消息,发现错误是关于另一个表:
{block\u content\u r\u e6f3906112}
您也可以检查此表结构吗?从错误消息中还可以看到值是
[:db\u insert\u placeholder\u 5]=>book
,因此可能是比
varchar(4)
@SlavaRozhnev-ah更小的列类型找到了它!感谢您为我指明了正确的方向!