2015-04-15 1 views
1

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

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

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

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

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

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

+1

Редактировать: Каков результат вышесказанного? Я не могу проверить прямо сейчас, но IIRC, поля BIT mySQL возвращаются как числа, поэтому попробуйте функцию FormatBaseN, то есть 'FormatBaseN (q1.mybitfield, 2)'. В противном случае укажите имя класса в столбце, то есть q1.mybitfield.getClass(). Name. Что в итоге ? Кроме того, из любопытства, зачем вам это нужно? – Leigh

+0

Спасибо, я не знаю, как дать вам кредит на ваш вклад. – user2721815

ответ

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: High-order 0 bits are not displayed in the converted value. Это также относится к функции CF.

+0

Это работает и кажется немного проще, поскольку все это за один шаг. Благодарю. Я искал это некоторое время. – user2721815

2

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

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

для MySQL заявление:

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

И Coldfusion выглядел следующим образом:

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

Редактировать

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

+0

Собственно, я, вероятно, думал о SQL Server с точки зрения типа возврата. Быстрый поиск предполагает, что вы можете использовать функцию BIN() mysql. Попробуйте: SELECT BIN (item +0) AS di FROM yourTable' – Leigh