замена символов на UTF-8 после использования функции mysql_set_charset ('utf8') - PullRequest
3 голосов
/ 26 марта 2012

Я преобразовал все таблицы mysql в utf-8_unicode и начал использовать функцию mysql_set_charset('utf8');.

Но после этого некоторые символы, такие как Ş, Ö, начали выглядеть как Ö, Åž

Как я могу заменить такие буквы в mysql на формат UTF-8?

короче, могу ли я найти список всех этих любопытных символов для замены?

РЕДАКТИРОВАТЬ: Он на самом деле объясняет эту проблему в этой статье, но я не могу ее правильно понять, lol

http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

Ответы [ 2 ]

10 голосов
/ 26 марта 2012

вам не нужно этого делать.просто используйте этот код после подключения к базе данных.

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");

и используйте кодировку utf-8 на всех своих страницах.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4 голосов
/ 01 июля 2012

Этот скрипт PHP позволяет вам конвертировать вашу существующую базу данных и таблицы в UTF-8:

<?php

  // Database connection details 
  $db_srv = 'localhost';
  $db_usr = 'user'; 
  $db_pwd = 'password'; 
  $db_name = 'database name';

  // New charset information, update accordingly if not UTF8
  $char_set = 'utf8';
  $char_collation = 'utf8_general_ci';

  header('Content-type: text/plain'); 

  // extablish the connection
  $connection = mysql_connect($db_srv,$db_usr,$db_pwd) or die(mysql_error()); 

  // select the databse
  $db = mysql_select_db($db_name) or die(mysql_error()); 

  // get existent tables
  $sql = 'SHOW TABLES';
  $res = mysql_query($sql) or die(mysql_error()); 

  // for each table found
  while ($row = mysql_fetch_row($res))
  {   
    // change the table charset
    $table = mysql_real_escape_string($row[0]); 

    $sql = " ALTER TABLE ".$table." 
             DEFAULT CHARACTER SET ".$char_set." 
             COLLATE ".$char_collation; 

    mysql_query($sql) or die(mysql_error());

    echo 'The '.$table.' table was updated successfully to: '.$char_set."\n";
  }

  // Update the Collation of the database itself
  $sql = "ALTER DATABASE CHARACTER SET ".$char_set.";";
  mysql_query($sql) or die(mysql_error());

  echo 'The '.$db_name.' database collation';
  echo ' has been updated successfully to: '.$char_set."\n";

  // close the connection to the database
  mysql_close($connection);

?>

Сохраните его в файле, скажем, db_charset.php, загрузите его в корневой каталог вашего веб-сайта и запустите из браузера:

например.,

http://www.yoursite.com/db_charset.php

Другие соображения необходимы для того, чтобы все работало нормально после преобразования:

  • Используемые файлы PHP должны быть закодированы с использованием UTF-8
  • Заголовки PHP и заголовки HTML также должны быть установлены в UTF-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...