Convert Database to UTF8'; echo '

This script generates SQL to convert existing tables to utf8, following the guide at http://codex.wordpress.org/Converting_Database_Character_Sets, temporarily setting various fields to BLOB before setting them back to their respective types.

'; echo '

Please note that you probably will get some errors running the scripts, regarding key length on some tables. These errors can be ignored (at least I did :).

'; require_once("wp-config.php"); global $wpdb; /** * Fetch all tables */ $tables = array(); $sql_tables = "SHOW TABLES"; $res_tables = $wpdb->get_results( $sql_tables ); if( is_array( $res_tables ) ){ foreach( $res_tables as $res_table ){ $tables[$res_table->Tables_in_DATABASENAME] = array(); } } /** * Loop all tables fetching each table's fields and filter out fields of type CHAR, VARCHAR, TEXT, ENUM, and SET (and related variations) */ if( count( $tables )>0 ){ foreach( $tables as $table=>$fields ){ $sql_fields = "EXPLAIN ".$table; $res_fields = $wpdb->get_results( $sql_fields ); if( is_array( $res_fields ) ){ foreach( $res_fields as $field ){ switch( TRUE ){ case strpos( strtolower( $field->Type ), 'char' )===0: case strpos( strtolower( $field->Type ), 'varchar' )===0: case strpos( strtolower( $field->Type ), 'text' )===0: case strpos( strtolower( $field->Type ), 'enum' )===0: case strpos( strtolower( $field->Type ), 'set' )===0: case strpos( strtolower( $field->Type ), 'tinytext' )===0: case strpos( strtolower( $field->Type ), 'mediumtext' )===0: case strpos( strtolower( $field->Type ), 'longtext' )===0: $tables[$table][$field->Field] = $field->Type; break; default: break; } } } } } $sql_to_blob = ''; $sql_to_utf8 = ''; $sql_to_original = ''; foreach( $tables as $table=>$fields ){ $sql_to_utf8 .= "\nALTER TABLE ".$table." charset=utf8;"; if( count( $fields )>0 ){ foreach( $fields as $name=>$type ){ $sql_to_blob .= "\nALTER TABLE ".$table." MODIFY ".$name." BLOB;"; $sql_to_original .= "\nALTER TABLE ".$table." MODIFY ".$name." ".$type.";"; } } } $complete_sql = $sql_to_blob."\nALTER DATABASE ".DB_NAME." charset=utf8;".$sql_to_utf8.$sql_to_original; echo nl2br( $complete_sql ); ?>