db-patch-mysql-utf8.sh 864 B

123456789101112131415161718192021222324
  1. #!/bin/bash
  2. db_name=$1
  3. echo -n "Enter password:"
  4. read db_pass
  5. C_TABLES=$(mysql -u root -p ${db_name} --password=${db_pass} -B -N -e "SHOW TABLES")
  6. echo "${C_TABLES}" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SET foreign_key_checks = 1; "}' >migration_utf8
  7. echo "ALTER DATABASE ${db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;">>migration_utf8
  8. echo "${C_TABLES}" | while read table; do
  9. mysql -u root -p ${db_name} --password=${db_pass} -e "show create table ${table}" | sed 's/\\n/\n/g' | egrep -i "[[:space:]]MEDIUMTEXT[[:space:]]" | awk '{ print $1 }' | while read c_field; do
  10. echo "ALTER TABLE $table MODIFY $c_field TEXT NULL" >>migration_utf8
  11. done
  12. done
  13. exit
  14. mysql -u root -p ${db_name} --password=${db_pass} < migration_utf8
  15. rm -f migration_utf8
  16. exit