MST

星途 面试题库

面试题:MySQL InnoDB如何处理 VARCHAR 类型溢出列

在MySQL InnoDB存储引擎中,对于VARCHAR类型的列,如果插入的数据长度超过了该列定义的最大长度,InnoDB会采取怎样的策略来处理?请简要说明。
19.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 严格模式(sql_mode 包含 STRICT_TRANS_TABLES
    • 若插入的数据长度超过 VARCHAR 列定义的最大长度,MySQL 会抛出错误,并且插入操作失败,整个事务回滚(如果在事务中)。例如:
    SET sql_mode = 'STRICT_TRANS_TABLES';
    CREATE TABLE test_table (col VARCHAR(5));
    INSERT INTO test_table (col) VALUES ('abcdef');
    
    上述插入语句会报错,错误信息类似 Data too long for column 'col' at row 1
  2. 非严格模式(sql_mode 不包含 STRICT_TRANS_TABLES
    • MySQL 会对数据进行截断处理,只保留最大长度限制内的数据,然后插入成功。例如:
    SET sql_mode = '';
    CREATE TABLE test_table (col VARCHAR(5));
    INSERT INTO test_table (col) VALUES ('abcdef');
    
    此时,插入的数据 abcdef 会被截断为 abcde 并成功插入。同时,MySQL 会产生一个警告,可以通过 SHOW WARNINGS 查看警告信息,类似 Truncated incorrect VARCHAR value: 'abcdef'