Как преобразовать двоичные данные из MySQL в строку в ColdFusion 11?

У меня есть поле в моей базе данных MySQL, для которого задан тип данных «BIT». Значение в поле — 101101. Я пытаюсь прочитать это значение с помощью Coldfusion (версия 11).

Я просто использую следующий код:

<cfquery name=q1 datasource=#data_source#>
  select * from mytable
</cfquery>

<cfoutput>
 #q1.mybitfield#
</cfoutput>

Я пытался использовать CAST и CONVERT на стороне MySQL, и я пробовал CharSetEncoded на стороне CF вместе со всеми вариантами ToString, ToBase64 и ToBinary, которые я могу придумать.

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


person John    schedule 15.04.2015    source источник
comment
Изменить: каков результат вышеизложенного? Я не могу протестировать прямо сейчас, но IIRC, поля BIT mySQL возвращаются в виде чисел, поэтому попробуйте функцию FormatBaseN, т.е. FormatBaseN(q1.mybitfield, 2) . В противном случае выведите имя класса столбца, т.е. q1.mybitfield.getClass().name. Что в итоге ? Кроме того, из любопытства, зачем вам это нужно?   -  person Leigh    schedule 16.04.2015
comment
Спасибо, я не знаю, как отдать вам должное за ваш вклад.   -  person John    schedule 16.04.2015


Ответы (2)


На самом деле, я, вероятно, имел в виду битовый тип SQL Server. Для MySQL более простым вариантом может быть использование bin( ) функция, которая:

Возвращает строковое представление двоичного значения N, ... Это эквивалентно CONV(N,10,2). Возвращает NULL, если N равно NULL.

Например:

  SELECT  bin(YourBitColumn) AS YourBitColumn FROM YourTable
  ... or 
  SELECT  bin(YourBitColumn+0) AS YourBitColumn FROM YourTable

NB: Старшие нулевые биты не отображаются в преобразованном значении. Это относится и к функции CF.

person Leigh    schedule 15.04.2015
comment
Это также работает и кажется немного проще, так как все делается за один шаг. Спасибо. Я искал это некоторое время. - person John; 16.04.2015

Спасибо Лей за помощь. Мне никогда не удавалось заставить его работать всего за один шаг, поэтому я использовал двухэтапное решение (если вы хотите его так назвать). В итоге я настроил свой оператор MySQL для преобразования поля в целое число без знака (хотя десятичное число или целое число со знаком также сработали бы), а затем, как только я прочитал десятичное значение, я смог преобразовать его в двоичный, используя ваш предложение FormatBaseN (q1.myfield, 2). Так что спасибо за напоминание о FormatBaseN. Я забыл об этом.

Мой окончательный код выглядел так:

Заявление MySQL:

SELECT *, CONVERT(item , UNSIGNED) as di from mytable 

И Coldfusion выглядел так:

<cfset d = FormatBaseN(q1.di, 2)>

Изменить

После написания этого я решил пойти с ответом Ли выше, так как это было лучшее решение.

person John    schedule 15.04.2015
comment
На самом деле я, вероятно, имел в виду SQL Server с точки зрения типа возвращаемого значения. Быстрый поиск предполагает, что вы можете использовать функцию mysql BIN(). Попробуйте: SELECT BIN(item +0) AS di FROM yourTable - person Leigh; 16.04.2015