Ответ 1
Я думаю, что документация достаточно ясно о различиях между байтой и текстом:
Двоичные строки отличаются от символьных строк двумя способами. Во-первых, двоичные строки специально позволяют хранить октеты с нулевым значением и другие "непечатные" октеты (обычно октеты вне диапазона от 32 до 126). Строки символов запрещают нулевые октеты, а также запрещают любые другие значения октетов и последовательности значений октетов, которые являются недопустимыми в соответствии с кодировкой набора символов, выбранным базой данных. Во-вторых, операции над двоичными строками обрабатывают фактические байты, тогда как обработка символьных строк зависит от настроек локали. Короче говоря, двоичные строки подходят для хранения данных, которые программист считает "необработанными байтами", тогда как символьные строки подходят для хранения текста.
http://www.postgresql.org/docs/9.0/static/datatype-binary.html
... это связано с тем, является ли содержимое "текстовым" (в зависимости от настроек локали и интернационализации, которые вы применили к конфигурации вашего сервера и ОС, на которой вы его выполняете) или массивов "октетов" ( последовательности 8-битных двоичных значений - обычно называемые "байтами").
(Есть некоторые технические различия между термином "байт" и термином "октет" - потому что исторически некоторые платформы и вычислительные устройства использовали "байты" с четностью и/или стоп-битами, в то время как термин "октеты" всегда означает ровно 8 -bit; термин, который был введен для уточнения спецификаций и документации для сетевых протоколов).