【发布时间】:2011-12-11 15:07:31
【问题描述】:
我有一个 mysql 5.1.50 服务器。 我最近为一些旧表创建了一个转储文件,其中的数据是从旧版本的 mysql 转换而来的。 在导入期间,我收到“列的数据被截断”消息。短搜索显示有 varchar 值超过了表中定义的 varchar 值的行。
- 这怎么可能?尝试重新创建它没有成功,有没有人遇到过这种状态?
- 如何在不全表扫描整个数据库的情况下找到有问题的行?
- 最重要的是,这是否可以修复(同样,使用简单的解决方案,完整的 drop-create 将无济于事)
来自 db(数据被隐藏但真实获取):
描述xxx +----------------+------------------+------+------+ ---------+----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +----------------+------------------+------+------+ ---------+----------------+ |编号 | int(10) 无符号 |否 |优先级 |空 |自动增量 | |日期 |日期 |否 |穆尔 |空 | | |整数1 | int(10) 无符号 |否 | |空 | | | v1 | varchar(200) |否 | |空 | | | v2 | varchar(200) |否 | |空 | | | i2 | int(10) 无符号 |否 | |空 | | | i3 | int(10) 无符号 |否 | |空 | | | f1 |浮动 |否 | |空 | | | f2 |浮动 |否 | |空 | | +----------------+------------------+------+------+ ---------+----------------+ select count(id) from xxx where length(v1)>200 group by length(v1); +-----------+------+ |计数(id) |长度(v1) | +-----------+------+ | 7 | 201 | | 1 | 202 | | 1 | 203 | | 5 | 204 | | 1 | 205 | | 1 | 206 | | 5 | 207 | | 9 | 208 | | 4 | 209 | | 1 | 210 | | 67 | 212 | | 13 | 214 | | 1 | 215 | | 1 | 216 | | 2 | 220 | | 2 | 221 | | 2 | 230 | | 2 | 235 | | 1 | 274 | | 1 | 290 | | 1 | 320 | +-----------+------+【问题讨论】: