【发布时间】:2017-12-13 11:26:26
【问题描述】:
我有一个 MySQL 表 t 超过 1.5 亿行。其中一列 (c) 是包含 64 位十六进制数的 VARCHAR(64)。为了节省空间并使事情变得更快,我想解码十六进制并将其转换为BINARY(32) 列。
我的计划是使用三个查询:
ALTER TABLE t CHANGE c c BINARY(64) NOT NULL;UPDATE t SET c=UNHEX(c);ALTER TABLE t CHANGE c c BINARY(32) NOT NULL;
前两个运行良好,但在第三个查询中我收到错误:
#1265 - Data truncated for column 'c' at row 1
我知道我正在截断数据,这正是我想要的。我想去掉BINARY(64)末尾的32个0x00字节,把它变成BINARY(32)。
我尝试过的事情:
UPDATE t SET c=LEFT(c, 32);似乎根本没有做任何事情。使用
ALTER IGNORE TABLE会出现语法错误。
【问题讨论】:
标签: mysql binary-data truncate alter-table truncation