문제

현재 특정 테이블의 모든 열을 나열하고 각 열이 서명되지 않았는지 확인하려고 합니다.

다음은 내 테스트 픽스처의 예입니다.

CREATE TABLE ttypes
(
    cbiginteger BIGINT UNSIGNED,
    cinteger INT UNSIGNED,
    csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;

특정 테이블의 모든 열을 나열하기 위해 두 가지 가능성을 발견했습니다.

SHOW FULL COLUMNS
FROM ttypes;

에 따르면 선적 서류 비치, 이 쿼리는 다음 필드를 반환합니다.필드, 유형, Null, 기본값, 추가 및 설명.그 중 어느 것도 열이 서명되지 않았는지 여부를 결정할 수 없습니다.

그 이후에 보니 information_schema.columns 이는 에서 사용하는 기본 테이블입니다. SHOW COLUMNS 질문.

SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';

불행하게도 결과 필드 중 어느 것도 열이 서명되지 않았는지 여부를 확인할 수 없습니다.

도움이 되었습니까?

해결책

내가 아는 한, 해당 속성이 저장되는 유일한 장소는 COLUMN_TYPE ~에 INFORMATION_SCHEMA.COLUMNS.

이는 다음의 출력에 포함되어야 합니다. SHOW COLUMNS (이내에 Type):

mysql> show columns from ttypes;
+---------------+----------------------+------+-----+---------+-------+
| Field         | Type                 | Null | Key | Default | Extra |
+---------------+----------------------+------+-----+---------+-------+
| cbiginteger   | bigint(20) unsigned  | YES  |     | NULL    |       |
| cinteger      | int(10) unsigned     | YES  |     | NULL    |       |
| csmallinteger | smallint(5) unsigned | YES  |     | NULL    |       |
+---------------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

불행하게도 당신은 Type 그리고 찾아 unsigned, 또는 아닙니다 unsigned 거기에는 서명된 열에 아무것도 넣지 않습니다.

다른 팁

이 마술을 시도하십시오 :

select COLUMN_NAME,
       COLUMN_TYPE, 
       IS_NULLABLE, 
       IF(COLUMN_TYPE LIKE '%unsigned', 'YES', 'NO') as IS_UNSIGNED 
       from information_schema.COLUMNS where TABLE_NAME='record1'
.

출력

COLUMN_NAME  COLUMN_TYPE       IS_NULLABLE  IS_UNSIGNED
-----------  ----------------  -----------  -----------
id           int(10) unsigned  NO           YES
recordID     varchar(255)      YES          NO
.

테이블의 모든 변수의 유형을 결정하려면 다음과 같이 쿼리를 실행할 수 있습니다.

select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' 
.

다음과 같은 쿼리가있는 특정 변수 (예 : cinter)의 유형을 쉽게 결정할 수 있습니다.

select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' and COLUMN_NAME LIKE 'cinteger'
.

위의 코드는 서명되지 않은 경우에만 검색되는 변수의 이름을 반환합니다.

마침내 MySQL 루프, 프로 시저 또는 좋아하는 스크립팅 언어를 사용 하여이 결과를 사용하고 / 또는 다른 변수를 계속 검색 할 수 있습니다.

누군가가 .NET의 MySQL 드라이버를 위해이 작업을 수행하는 경우, GetSchema ()를 사용하면 서명되지 않은 정보가 사용 가능한 방법이 있습니다.

_connection.GetSchema("Columns")
.

여기에 이미지 설명을 입력하십시오 >>

및 다음 :

여기에 이미지 설명을 입력하십시오 >>

이 문제가 완전히 벗어나지 않으며 프로그래밍 방식으로 기호를 결정하는 사람을 찾는 데 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top