PageRenderTime 34ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/install/convert_utf8_nodbal.php

http://github.com/MightyGorgon/icy_phoenix
PHP | 93 lines | 60 code | 16 blank | 17 comment | 15 complexity | df16f2c1a4d90e66b692d160723dca52 MD5 | raw file
Possible License(s): AGPL-1.0
  1. <?php
  2. /**
  3. *
  4. * @package Icy Phoenix
  5. * @version $Id$
  6. * @copyright (c) 2008 Icy Phoenix
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /*
  11. * Thanks to:
  12. * http://www.v-nessa.net/2007/12/06/convert-database-to-utf-8
  13. * http://developer.loftdigital.com/blog/php-utf-8-cheatsheet
  14. * http://www.mysqlperformanceblog.com/2007/12/18/fixing-column-encoding-mess-in-mysql/
  15. */
  16. //die('Comment this line...');
  17. if (php_sapi_name() === 'cli')
  18. {
  19. define('IP_ROOT_PATH', dirname(dirname($argv[0])) . '/');
  20. }
  21. define('IN_ICYPHOENIX', true);
  22. if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
  23. if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
  24. @set_time_limit(0);
  25. @ini_set('memory_limit', '32M');
  26. require IP_ROOT_PATH . 'config.' . PHP_EXT;
  27. $db = new mysqli($dbhost, $dbuser, $dbpasswd, $dbname);
  28. if (mysqli_connect_error())
  29. {
  30. trigger_error('Database connection failed', E_USER_ERROR);
  31. }
  32. $sql = "ALTER DATABASE {$db->real_escape_string($dbname)}
  33. CHARACTER SET utf8
  34. DEFAULT CHARACTER SET utf8
  35. COLLATE utf8_bin
  36. DEFAULT COLLATE utf8_bin";
  37. $db->query($sql) or die(mysql_error());
  38. $sql = "SHOW TABLES";
  39. $result = $db->query($sql) or die(mysql_error());
  40. while ($row = $result->fetch_row())
  41. {
  42. $table = $row[0];
  43. if (strpos($table, $table_prefix) === 0)
  44. {
  45. $sql = "ALTER TABLE {$db->real_escape_string($table)}
  46. DEFAULT CHARACTER SET utf8
  47. COLLATE utf8_bin";
  48. //ENGINE=MYISAM";
  49. $db->query($sql) or die(mysql_error());
  50. print "$table changed to UTF-8.<br />\n";
  51. $sql = "SHOW FIELDS FROM {$db->real_escape_string($table)}";
  52. $result_fields = $db->query($sql);
  53. while ($row_fields = $result_fields->fetch_row())
  54. {
  55. $field_name = $row_fields[0];
  56. $field_type = $row_fields[1];
  57. $field_null = $row_fields[2];
  58. $field_key = $row_fields[3];
  59. $field_default = $row_fields[4];
  60. $field_extra = $row_fields[5];
  61. if ((strpos(strtolower($field_type), 'char') !== false) || (strpos(strtolower($field_type), 'text') !== false) || (strpos(strtolower($field_type), 'blob') !== false) || (strpos(strtolower($field_type), 'binary') !== false))
  62. {
  63. //$sql_fields = "ALTER TABLE {$db->real_escape_string($table)} CHANGE " . $db->real_escape_string($field_name) . " " . $db->real_escape_string($field_name) . " " . $db->real_escape_string($field_type) . " CHARACTER SET utf8 COLLATE utf8_bin";
  64. $sql_fields = "ALTER TABLE {$db->real_escape_string($table)} CHANGE " . $db->real_escape_string($field_name) . " " . $db->real_escape_string($field_name) . " " . $db->real_escape_string($field_type) . " CHARACTER SET utf8 COLLATE utf8_bin " . (($field_null != 'YES') ? "NOT " : "") . "NULL DEFAULT " . (($field_default != 'None') ? ((!empty($field_default) || !is_null($field_default)) ? (is_string($field_default) ? ("'" . $db->real_escape_string($field_default) . "'") : $field_default) : (($field_null != 'YES') ? "''" : "NULL")) : "''");
  65. $db->query($sql_fields);
  66. print "\t$sql_fields<br />\n";
  67. }
  68. }
  69. }
  70. }
  71. $result->close();
  72. $sql = "ALTER TABLE {$table_prefix}search_wordlist CHANGE word_text varchar(50) COLLATE utf8_bin NOT NULL DEFAULT ''";
  73. $db->query($sql) or die(mysql_error());
  74. $db->close();
  75. flush();
  76. die('<br /><br />Conversion completed successfully, you can now proceed with the update.');
  77. ?>