sourcecode

MySQL은 항상 BIT 값을 공백으로 반환합니다.

codebag 2023. 8. 6. 10:04
반응형

MySQL은 항상 BIT 값을 공백으로 반환합니다.

테이블 만들기 스크립트에서 hasMultipleColors 필드를 BIT로 정의했습니다.

hasMultipleColors BIT NOT NULL,

INSERT를 실행할 때 이 BIT 필드 또는 다른 BIT 필드에 대해 경고가 발생하지 않지만 행을 선택하면 모든 BIT 값이 비어 있는 것으로 나타납니다.

명령줄에서 이러한 레코드를 수동으로 업데이트하려고 하면 홀수 효과가 발생합니다. 레코드가 일치하고 변경되었음을 보여줍니다(해당되는 경우). 그러나 항상 공백으로 표시됩니다.

서버 버전: 5.5.24-0ubuntu0.12.04.1(Ubuntu)

mysql> update pumps set hasMultipleColors = 1 where id = 1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> select hasMultipleColors from pumps where id = 1;
+-------------------+
| hasMultipleColors |
+-------------------+
|                  |
+-------------------+
1 row in set (0.00 sec)

mysql> update pumps set hasMultipleColors = b'0' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select hasMultipleColors from pumps where id = 1;
+-------------------+
| hasMultipleColors |
+-------------------+
|                   |
+-------------------+
1 row in set (0.00 sec)

무슨 생각 있어요?

비트 필드를 정수로 캐스팅해야 합니다.

mysql> select hasMultipleColors+0 from pumps where id = 1;

는 버그 때문입니다. http://bugs.mysql.com/bug.php?id=43670 을 참조하십시오.상태 표시:고쳐지지 않습니다.

BIT 필드를 부호 없는 필드로 캐스팅할 수 있습니다.

  SELECT CAST(hasMultipleColors AS UNSIGNED) AS hasMultipleColors 
  FROM pumps 
  WHERE id = 1

다음 값을 기준으로 1 또는 0을 반환합니다.hasMultipleColors.

다음과 같이 변환을 수행해야 합니다.bit 1인쇄할 수 없습니다.

SELECT hasMultipleColors+0 from pumps where id = 1;

여기서 더 보기: http://dev.mysql.com/doc/refman/5.0/en/bit-field-literals.html

여러분이 보는 효과의 실제 이유는, 그것이 정확하고 예상대로 이루어졌기 때문입니다.

bit필드에는 비트가 있으므로 비트가 반환됩니다. 단일 비트를 문자로 출력하려고 하면 지정된 비트 값(이 경우 0-폭 제어 문자)을 가진 문자가 표시됩니다.

일부 소프트웨어는 이를 자동으로 처리할 수 있지만 명령줄 MySQL의 경우 어떤 방식으로든 int로 캐스트해야 합니다(예: 0을 추가하여).

PHP와 같은 언어에서 문자의 서수 값은 다음을 사용하여 올바른 값을 제공합니다.ord()함수(하나보다 긴 비트 필드에 대해 작업하려면 10진수에서 2진수 문자열로 변환해야 함).

편집:
변경되었다고 하는 꽤 오래된 소스를 발견했습니다. 따라서 MySQL을 업그레이드하면 모든 작업이 예상대로 더 잘 수행될 수 있습니다. http://gphemsley.wordpress.com/2010/02/08/php-mysql-and-the-bit-field-type/

언급URL : https://stackoverflow.com/questions/11609474/mysql-always-returning-bit-values-as-blank

반응형