Удалите нераспознанные символы вместо хранения вопросительных знаков - PullRequest
1 голос
/ 15 сентября 2011

У меня есть база данных, в которой хранятся данные в формате UTF-8, но иногда некоторые данные (вне моего контроля) добавляются с нераспознанными символами, которые хранятся в виде вопросительных знаков (?). Есть ли способ настроить MySQL для удаления этих символов вместо этого?

1 Ответ

1 голос
/ 15 сентября 2011

возможно, решение проблемы вместо ее обхода будет лучшим решением. если вы просто удалите вопросительные знаки, сохраненные данные не будут такими уродливыми, как сейчас, но все равно будут неправильными (неправильно = не совсем те данные, которые пользователь хотел сохранить).

эта проблема звучит так, как будто вы пропустили где-то указать кодировку символов, так что используются настройки клиента по умолчанию (вы не сказали, кто именно клиенты - может быть, браузер пользователя?), Который, кажется, является утф. 8 или что-то совместимое в большинстве случаев - но иногда есть клинт с экзотической кодировкой по умолчанию, которая заставляет вас сталкиваться с проблемами.

Чтобы решить эту проблему, просто убедитесь, что для кодировки символов установлено значение utf-8 everywere :

  • скажите MySQL использовать utf-8. чтобы сделать это, добавьте это в ваш my.cnf:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • прежде чем взаимодействовать с mysql, отправьте два запроса:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    или, альтернативно, пусть php сделает это после открытия соединения:

    mysql_set_charset('utf8', $conn);
    
  • установить UTF-8 в качестве кодировки по умолчанию для вашей базы данных

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • сделать то же самое для таблиц:

    CREATE TABLE `my_table` (
      -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • при условии, что клиент является браузером, используйте ваш контент как utf-8 и правильный заголовок:

    header('Content-type: text/html; charset=utf-8');
    

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

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • и, что не менее важно, сообщите браузеру отправлять формы с использованием utf-8

    <form accept-charset="utf-8" ...>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...