我有一个MySQL表t,其中有超过1.5亿行。其中一列(c)是一个VARCHAR(64),包含一个64位的十六进制数。为了节省空间并加快速度,我想要解码十六进制并将其转换为BINARY(32)列。
我的计划是使用三个查询:
1. ALTER TABLE t CHANGE c c BINARY(64) NOT NULL; 2. UPDATE t SET c=UNHEX(c); 3. 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)。
我尝试过的方法: 1. UPDATE t SET c=LEFT(c, 32); 没有任何效果。 2. 使用ALTER IGNORE TABLE会导致语法错误。
我的计划是使用三个查询:
1. ALTER TABLE t CHANGE c c BINARY(64) NOT NULL; 2. UPDATE t SET c=UNHEX(c); 3. 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)。
我尝试过的方法: 1. UPDATE t SET c=LEFT(c, 32); 没有任何效果。 2. 使用ALTER IGNORE TABLE会导致语法错误。