Pregunta

Actualmente estoy tratando de lista de todas las columnas de una tabla específica y determinar si cada columna no está firmado o no.

Aquí un ejemplo de mi montura de prueba:

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

En orden a la lista de todas las columnas de una tabla específica, he encontrado dos posibilidades:

SHOW FULL COLUMNS
FROM ttypes;

De acuerdo a la documentación, esta consulta devuelve los campos siguientes:Campo Tipo Nulo Predeterminado, Extra Y Comentarios.Ninguno de ellos me permite determinar si una columna no está firmado o no.

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

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

Por desgracia, ninguno de los campos de resultado me permite determinar si una columna no está firmado o no.

¿Fue útil?

Solución

Hasta donde yo sé, el único lugar en que los atributos se almacenan en COLUMN_TYPE en INFORMATION_SCHEMA.COLUMNS.

Que debe ser incluido 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)

Por desgracia, se tendría que analizar el contenido de Type y encontrar unsigned, o no unsigned allí - no ponga nada en para firma de columnas.

Otros consejos

Pruebe 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'

Salida

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

Para determinar el tipo para 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 eso, puede determinar fácilmente el tipo para una variable específica (por ejemplo, el cinterador) 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 seleccionada solo si está sin firmar.

Por fin, su puede usar un bucle MySQL, un procedimiento o su idioma de scripting favorito para usar este resultado y / o continúe buscando otras variables.

En caso de que alguien se tropieza con esto para el controlador MySQL en .NET, usando GetSchema () como yo, aquí es la información que no está disponible.

_connection.GetSchema("Columns")

 ingrese la descripción de la imagen aquí

y luego:

 ingrese la descripción de la imagen aquí

Espero que esto no esté completamente fuera de lugar para la pregunta, y ayuda a alguien que busca determinar programáticamente el signo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top