2012-01-06 10 views
5

Tengo una base de datos mysql con alrededor de 8 tablas que comienzan con una letra mayúscula. ¿Alguna forma rápida de minúsculas? O incluso uno por uno ... si intento esto, RENAME TABLE Contacts TO contacts Dice ERROR 1050 (42S01): Table 'contacts' already exists¿Minúsculas todos los nombres de tablas en una base de datos?

+4

La primera cosa que viene a la mente - utilizar dos cambios de nombre para cada tabla, es decir .: 'RENOMBRA tabla de contactos A continuación contacts_'' RENOMBRA contacts_ TABLA PARA contacts' No sabe de una solución mejor. De todos modos, ¿cuál es el sentido de esto? A MySQL no le importa si selecciona desde contactos, contactos, CoNTactS, etc. – Nikoloff

+0

¿Qué sistema operativo, por curiosidad? * ["La distinción entre mayúsculas y minúsculas del sistema operativo subyacente tiene un papel en la distinción entre mayúsculas y minúsculas de los nombres de bases de datos, tablas y desencadenantes".] (Http://dev.mysql.com/doc/refman/5.5/en/identifier- case-sensitivity.html) * – pilcrow

+0

@Nikoloff Buen pensamiento, eso funcionó. Y lo estoy usando con Ruby on Rails, nombrar asuntos –

Respuesta

4

Uso dos cambios de nombre - en primer lugar a un nombre temporal y luego a la minúscula:

RENAME TABLE Contacts TO contacts_ 

y luego

RENAME TABLE contacts_ TO contacts 

Por supuesto, usted debe tener cuidado de no tratar de usar un nombre de tabla ya existente, pero si inicialmente tenía tablas 'Contactos' y 'contactos', diría que tiene problemas mucho más serios que el caso.

+0

Esto podría ser un buen caso para un procedimiento almacenado que lo hace de una vez si hay muchas tablas – Nick

0

Al marcar esta link, usted tiene que:

RENAME TABLE tbl_name TO new_tbl_name 

PERO: El new_tbl_name debe NO ser utilizado por otra tabla como el nombre debe ser único

0

Lo siento por traer de vuelta una publicación anterior. Pero tuve problemas con esto también. Hice esta función para automatizar lo anterior. No ayudé en mi caso, pero podría ayudar a otras personas. Es por eso que lo estoy publicando aquí.

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `lowercasetables`() 
BEGIN 
    DECLARE done INT DEFAULT 0; 
    DECLARE tempname varchar(255); 
    DECLARE backupname varchar(255); 
    DECLARE sqlst varchar(5000); 
    DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES where table_schema = schema(); 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cur1; 

    REPEAT 
     FETCH cur1 INTO tempname;   
     SET backupname = concat(tempname,'_BACKUP'); 

     SET @sqlst = CONCAT(CONCAT('RENAME TABLE ', tempname), CONCAT(' TO ', backupname)); 
     PREPARE stmt1 FROM @sqlst; 
     EXECUTE stmt1; 
     DEALLOCATE PREPARE stmt1; 

     SET @sqlst = CONCAT(CONCAT('RENAME TABLE ', backupname), CONCAT(' TO ', LOWER(tempname))); 
     PREPARE stmt2 FROM @sqlst; 
     EXECUTE stmt2; 
     DEALLOCATE PREPARE stmt2; 

    UNTIL done END REPEAT; 

    CLOSE cur1; 

END 
+0

Intente publicar esto como una pregunta diferente o modifique su pregunta si no obtiene ninguna respuesta. – Gapchoos

Cuestiones relacionadas