Pergunta

Atualmente estou tentando lista de todas as colunas de uma tabela específica e determinar se cada coluna não for assinado ou não.

Aqui, um exemplo do meu teste de fixação:

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

Em ordem a lista de todas as colunas de uma tabela específica, encontrei duas possibilidades:

SHOW FULL COLUMNS
FROM ttypes;

De acordo com o documentação, esta consulta retorna estes campos:Campo Tipo Nulo Padrão, Extra Comentário.Nenhum deles me permite determinar se uma coluna não for assinado ou não.

Depois que eu olhar para o information_schema.columns qual é a base da tabela utilizada pelo SHOW COLUMNS consulta.

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

Infelizmente, nenhum dos campos de resultado me permite determinar se uma coluna não for assinado ou não.

Foi útil?

Solução

Tanto quanto eu posso dizer, o único lugar que esses atributos são armazenados em COLUMN_TYPE no INFORMATION_SCHEMA.COLUMNS.

Que devem ser incluídos nos resultados do SHOW COLUMNS (dentro de 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)

Infelizmente, você teria que analisar o conteúdo da Type e encontrar unsigned, ou não unsigned ali não coloca qualquer coisa para assinou colunas.

Outras dicas

Tente esta magia:

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'

Saída

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

Para determinar o tipo para todas as variáveis em uma tabela, você pode executar uma consulta como esta:

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

Depois disso, pode facilmente determinar o tipo para uma variável específica (por exemplo, o cinterger) com uma consulta como esta:

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

O código acima irá retornar o nome da variável pesquisada somente se ele não estiver assinado.

Por último, pode utilizar o mysql é um loop, procedimento ou o seu favorito linguagem de script para usar este resultado e/ou continuar a procurar outras variáveis.

Apenas no caso de alguém se depara com isso para o MySQL driver .net, usando GetSchema() gosta de mim, aqui é como não assinados informação está disponível.

_connection.GetSchema("Columns")

enter image description here

E em seguida:

enter image description here

Espero que isso não está completamente fora de lugar para a pergunta, e a ajuda de alguém olhando para determinar programaticamente o sinal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top