MySQL "двоичный" vs "char набор символов двоичный"

Какая разница между binary(10) vs char(10)character set binary?

И varbinary(10) vs varchar(10)character set binary?

Являются ли они синонимами в всех машинах MySQL?

Есть ли какой-либо вопрос, на который нужно следить?

Ответ 1

Нет разницы.

Однако, если вы сохраняете строку, существует оговорка.

Если вы хотите сохранить только массив байтов или другие двоичные данные, такие как поток или файл, тогда используйте двоичный тип, как это они предназначены для.

Цитата из руководства MySQL:

Использование бинарного набора CHARACTER SET в определении CHAR, VARCHAR, или TEXT, столбец обрабатывается как двоичный тип данных. Например, следующие пары определений эквивалентны:

CHAR(10) CHARACTER SET binary
BINARY(10)

VARCHAR(10) CHARACTER SET binary
VARBINARY(10)

TEXT CHARACTER SET binary
BLOB

Итак, технически нет никакой разницы.

Однако при сохранении строки он должен быть преобразован из строки в байтовые значения с использованием набора символов. Решение заключается в том, чтобы либо сделать это самостоятельно до сервера MySQL, либо оставить его в MySQL, чтобы сделать для вас. MySQL будет выполнять с помощью приведения строки в BINARY с использованием наборов символов BIN.

Если вы хотите сохранить кодировку в другом формате, скажем, что у вас есть бизнес-требование, в котором говорится, что вы должны использовать 4 байта на символ (MySQL не делает этого по умолчанию), вы могли бы затем использовать "CHARACTER SET BINARY" в текстовый столбец и выполнить кодировку набора символов самостоятельно.

Также стоит прочитать BINARY и VARBINARY Types из руководства по MySQL, поскольку это детализирует важную информацию, такую ​​как заполнение.

Резюме: Технической разницы нет, так как один является синонимом другого. На мой взгляд, логический смысл заключается в сохранении двоичных строк в типах данных, которые обычно содержат строку с помощью "CHARACTER SET BINARY" и для хранения байтовых массивов/потоков и т.д. В полях BINARY, которые не могут быть представлены преобразованием данных, хотя набор символов.