2011-06-08 16 views
5

Tengo una tabla con 27 campos varchar. Quiero que todos los campos estén en minúscula, pero quiero hacerlo en una breve llamada a mysql.¿Cómo cambio la caja en cada campo de una tabla mysql en una sola llamada?

Esto lo hace un solo campo:

UPDATE table 
SET field = LOWER(field) 

¿Cómo se hace el equivalente de esto (que no funciona):

UPDATE table 
SET * = LOWER(*) 
+1

+1 para una buena pregunta. Creo que la desafortunada respuesta es que no puedes hacerlo con * una consulta corta *. Ya veremos. –

+0

Me gusta la forma en que piensas, buena idea :) – Bohemian

+1

¿Qué pasa con 'SHOW COLUMNS FROM table' y algún lenguaje del lado del servidor? – alex

Respuesta

3

No puede hacerlo con su intento creativo SET * = LOWER(*) etc.

Sin embargo, puede hacerlo de esta manera:

UPDATE table SET 
column1 = LOWER(column1), 
column2 = LOWER(column2), 
-- etc, listing all text type columns 
columnN = LOWER(columnN); 

La razón por la que no hay un "atajo" es probablemente porque este patrón es muy poco frecuente.

+0

¿No puedo evitar escribir los 27 campos? –

+0

@ T.BrianJones Btw. Tener 27 columnas significa probablemente que su base de datos está mal diseñada. – Tadeck

+0

@Tadeck - por desgracia, estoy lidiando con un cliente que me está dando volcados de bases de datos viejos donde el db ya no existe, así que estoy atascado importando su basura y luego limpiándola. –

0

El consenso es que esto no se puede hacer en una sola consulta de mysql.

Aquí es un script PHP muy rápido que hace esto por N campos (gracias por la idea @alex):

$sql = "SHOW COLUMNS 
     FROM table"; 
$results = mysqli_query($dbcon,$sql); 
while($column = mysqli_fetch_assoc($results)) 
{ 
    $column = $column["Field"]; 
    $sql = "UPDATE table 
      SET $column = LOWER($column)"; 
    $success = mysqli_query($dbcon,$sql); 
} 
+0

Su pregunta original no menciona el uso de una tecnología del lado del servidor. Pero sí, esta es una solución potencial, aunque agresiva. –

Cuestiones relacionadas