Search code examples
mysqldatabaseprefix

How I can change prefixes in all tables in my MySQL DB?


My provider installed to my site Drupal CMS. Now I need copy all my data from old site. I have tables without prefixes in my old DB, but in new DB all tables have dp_[table_name] prefix.


Solution

  • zerkms solution didn't work for me. I had to specify the information_schema database to be able to query the Tables table.

    SELECT 
        CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q
    FROM 
        `information_schema`.`Tables` WHERE TABLE_SCHEMA='test';
    

    Edit:

    Optimized the query to only call RENAME TABLE once. Something I walked into was the fact that the concatenated output got truncated at 341 characters. This can be solved (if allowed by your server) by setting the MySQL variable group_concat_max_len to a higher value:

    SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters.