You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改列为NOT NULL时触发#1265数据截断错误,附schools表结构

搞定MySQL错误#1265:修改列为NOT NULL时第2行数据截断

嗨,这个错误我熟,本质就是你要设置为NOT NULL的列,在表的第2行里存在不符合要求的数据——要么是单元格本身是NULL,要么是存的数据长度超过了列的定义(结合你改NOT NULL的操作,更大概率是有NULL或者空字符串这类“无效”值)。

先看看你贴的表结构(虽然ownership列的定义被截断了,但能看到大部分列已经标记为NOT NULL了):

CREATE TABLE `schools` ( 
  `id` int(11) NOT NULL, 
  `name` varchar(255) CHARACTER SET utf8 NOT NULL, 
  `describtion` text CHARACTER SET utf8 NOT NULL, 
  `keywords` varchar(255) NOT NULL, 
  `url` varchar(255) NOT NULL, 
  `status` varchar(255) CHARACTER SET utf8 NOT NULL, 
  `location` varchar(255) CHARACTER SET utf8 NOT NULL, 
  `school_type` varchar(255) CHARACTER SET utf8 NOT NULL, 
  `fees` varchar(255) CHARACTER SET utf8 NOT NULL, 
  `ownership` varchar(2...

给你一步步解决的办法:

1. 先揪出问题数据

先定位第2行里你要修改的列到底有啥问题,执行这条SQL(假设你要改的是ownership,如果是其他列替换成对应列名就行):

-- 直接取第2行数据看全貌
SELECT * FROM schools LIMIT 1,1;
-- 或者如果id是主键的话,用id定位更准
SELECT `ownership` FROM schools WHERE id = 2;

重点看这个列的值:

  • 是不是NULL?
  • 是不是空字符串('')?
  • 字符长度是不是超过了列的定义(比如列是varchar(255),但存了300个字符)?

2. 修复问题数据

根据查到的问题,先把第2行的对应数据修好:

  • 如果是NULL或者空字符串,给它设个符合业务逻辑的默认值,比如:
UPDATE schools SET `ownership` = '公立' WHERE id = 2; -- 这里的'公立'换成你实际需要的默认值
  • 如果是数据长度超限,要么截断数据,要么改列的长度:
-- 截断到列允许的长度(比如255)
UPDATE schools SET `ownership` = SUBSTRING(`ownership`, 1, 255) WHERE id = 2;
-- 或者如果业务允许,直接把列改长
ALTER TABLE schools MODIFY COLUMN `ownership` varchar(500) CHARACTER SET utf8;

3. 再执行修改NOT NULL的操作

等数据修好了,再跑你原本的ALTER语句,比如:

ALTER TABLE schools MODIFY COLUMN `ownership` varchar(255) CHARACTER SET utf8 NOT NULL;

额外提醒

别只盯着第2行,最好全局检查下有没有其他行也有类似问题,避免改完又报错:

-- 检查列里有没有NULL值
SELECT COUNT(*) FROM schools WHERE `ownership` IS NULL;
-- 检查有没有空字符串
SELECT COUNT(*) FROM schools WHERE `ownership` = '';
-- 检查有没有长度超限的行
SELECT * FROM schools WHERE CHAR_LENGTH(`ownership`) > 255;

批量把这些问题数据都处理完,再执行修改操作就稳了。


内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:21:39