The above solutions were not complete enough for me. They dropped column attributes like auto_increment, default values, and Not Null. Additionally, I did not want to change columns in information_schema and mysql.
Warning: I did not research all column attribute combinations. Just the set that allowed me to convert my database. There could be more constants like CURRENT_TIMESTAMP in your database.
I used a few variations of the below to determine what was in my database.
SELECT distinct COLUMN_DEFAULT FROM information_schema.columns
This is the solution that worked for me:
select
CONCAT('ALTER TABLE ', '`', t.TABLE_NAME, '`', ' CHANGE `', c.COLUMN_NAME, '`',
' `', LOWER(`COLUMN_NAME`), '` ', COLUMN_TYPE,
IF (IS_NULLABLE = "YES", ' ', ' NOT NULL'),
IF (IS_NULLABLE = "YES",
IF (COLUMN_DEFAULT IS NULL, 'DEFAULT NULL', IF (COLUMN_DEFAULT = 'CURRENT_TIMESTAMP', ' DEFAULT CURRENT_TIMESTAMP', CONCAT(' DEFAULT ', '''', COLUMN_DEFAULT, ''''))),
IF (COLUMN_DEFAULT IS NOT NULL, IF (COLUMN_DEFAULT = 'CURRENT_TIMESTAMP', ' DEFAULT CURRENT_TIMESTAMP', CONCAT(' DEFAULT ', '''', COLUMN_DEFAULT, '''') ), '') ) ,
' ', EXTRA, ';')
from
information_schema.tables t
JOIN
information_schema.columns c
ON (c.table_name = t.table_name)
WHERE t.table_type = 'BASE TABLE'
AND t.table_schema not in ('information_schema', 'mysql')
INTO OUT FILE '/tmp/ColumnsToLowerCase.sql'
Time saving notes:
To output to a file you have to login to the database with sufficient rights.
I have root access so I logged in as root, but cut and past of the results works too if you have to.