Столбец
A BLOB
(крошечный, средний, длинный) содержит предоставленные байты.
Столбец TEXT
также делает это, но имеет CHARACTER SET
, поэтому он может преобразовывать и / или проверять символы на допустимость в течение INSERT
.
Если кодировка в клиенте отличается от заявленной для столбца в таблице, кодировка преобразуется. Смотри SET NAMES
. Типичные кодировки latin1
и utf8mb4
.
После считывания (SELECT
) выполняется обратное транскодирование.
Но если у клиента есть, скажем, латинские байты 1, и соединение неправильно утверждает, что клиент закодирован utf8mb4 (UTF-8), тогда произойдет любая из нескольких неприятностей - Mojibake (gibberish), усечение, вопросительные знаки и т. Д. .
Я подозреваю, что old_text
был объявлен как MEDIUMBLOB
, чтобы избежать проблем с набором символов. Недостатком является то, что вы не знаете, как отобразить old_text.
Сортировка и сравнение (например, с =
) также различаются. BLOB
просто смотрит на биты. TEXT
может выполнять сворачивание регистра, региональные эквиваленты и т. Д., В зависимости от выбранного COLLATION
.