私は1億5000万行以上のMySQLテーブルt
を持っています。列の1つ(c
)は、VARCHAR(64)
で、64桁の16進数を含んでいます。スペースを節約して物事をより速くするために、私はヘックスをデコードしてBINARY(32)
のコラムに変えたいと思っていました。ALTER TABLEを使用してMySQLのBINARYカラムを切り捨てる
私の計画は3つのクエリを使用することでした:
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;
最初の2は完全に働いたが、第三のクエリにし私はゲットですエラーをINGの:
#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
を使用すると、構文エラーが発生します。あなたはグローバル変数sql_mode
からSTRICT_TRANS_TABLES
フラグを削除する必要があり#1265 - Data truncated for column ...
エラーを回避するには