2012-05-19 8 views
13

Actualmente estoy tratando de enumerar todas las columnas de una tabla específica y determinar si cada columna no está firmada o no.¿Cómo determinar si una columna no está firmada?

Aquí, un ejemplo de mi prueba de accesorio:

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

Con el fin de enumerar todas las columnas de una tabla específica, he encontrado dos posibilidades:

SHOW FULL COLUMNS 
FROM ttypes; 

De acuerdo con la documentation, este la consulta devuelve estos campos: Campo, Tipo, Nulo, Predeterminado, Extra & Comentario. Ninguno de ellos me permite determinar si una columna no está firmada o no.

Después de eso, miro el information_schema.columns que es la tabla base utilizada por la consulta SHOW COLUMNS.

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

Lamentablemente, ninguno de los campos de resultados me permite determinar si una columna no está firmada o no.

+0

¿Qué versión de MySQL está usando? – Simon

Respuesta

7

Por lo que puedo decir, el único lugar donde se almacenan esos atributos es en COLUMN_TYPE en INFORMATION_SCHEMA.COLUMNS.

que deben ser incluidos en la salida de 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) 

desgracia habría que analizar el contenido de Type y encontrar unsigned, o no unsigned allí - que doesn' Pon algo para las columnas firmadas.

+0

Gracias por su respuesta rápida. – egeloen

4

para determinar el tipo de todas las variables en una tabla puede ejecutar una consulta como esta:

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

Después de que su puede determinar fácilmente el tipo de una variable específica (por ejemplo, el cinterger) con una consulta como esta :

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

El código anterior devolverá el nombre de la variable buscada solo si no está firmado.

Por fin puedes usar un bucle mysql, un procedimiento o tu lenguaje de scripting favorito para usar este resultado y/o continuar buscando otras variables.

3

probar este mágico:

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' 

salida

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