我有一个mysql 5.1.50服务器。 我最近为一些旧表创建了一个转储文件,其中的数据是从旧版本的mysql转换而来的。 在导入过程中,我收到了“数据截断列”消息。短搜索显示存在varchar值超过表的已定义varchar值的行。
(数据被遮挡但是真正的提取):
desc xxx +----------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | date | date | NO | MUL | NULL | | | int1 | int(10) unsigned | NO | | NULL | | | v1 | varchar(200) | NO | | NULL | | | v2 | varchar(200) | NO | | NULL | | | i2 | int(10) unsigned | NO | | NULL | | | i3 | int(10) unsigned | NO | | NULL | | | f1 | float | NO | | NULL | | | f2 | float | NO | | NULL | | +----------------+------------------+------+-----+---------+----------------+ select count(id) from xxx where length(v1)>200 group by length(v1); +-----------+------------------+ | count(id) | length(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 | +-----------+------------------+
答案 0 :(得分:0)
将varchar字段定义为大于200个字符。
了解详情VARCHAR列中的值是可变长度字符串。长度可以指定为MySQL 5.0.3之前的0到255之间的值,5.0.3及更高版本中的0到65,535之间的值。 MySQL 5.0.3及更高版本中VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列之间共享)和使用的字符集的限制。
上述说法的内容是您可以定义长度大于255的varchar列,该表中所有varchar列的大小总和不会超过65,535 更具体地说,您可以修改表格列:
ALTER TABLE xxx CHANGE v1 v1 VARCHAR(500);
答案 1 :(得分:0)
length()
返回以字节为单位的大小,char_length()
- 字符大小SELECT * FROM your_table WHERE LENGTH(v1) != CHAR_LENGTH(v1)