【问题标题】:Remove Unrecognized Characters Instead of Storing Question Marks删除无法识别的字符而不是存储问号
【发布时间】:2011-09-15 13:27:59
【问题描述】:

我有一个将数据存储为 UTF-8 的数据库,但有时某些数据(我无法控制)添加了无法识别的字符,这些字符存储为问号 (?)。有没有办法配置 MySQL 来删除这些字符?

【问题讨论】:

    标签: mysql utf-8 character-encoding


    【解决方案1】:

    也许解决问题而不是解决问题会是更好的解决方案。如果你只是删除问号,存储的数据不会像现在那么难看,但它仍然是错误的(错误 = 不完全是用户想要保存的数据)。

    这个问题听起来你错过了在某处指定字符编码,因此使用客户端的默认设置(你没有说到底是客户端 - 也许是用户浏览器?)这似乎是 utf- 8 或大多数时候兼容的东西 - 但有时会有一个带有异国情调的默认字符集的 clint,这会让你遇到问题。

    要解决这个问题,只需确保您已将字符编码设置为 utf-8everywere

    • 告诉 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" ...>
      

    【讨论】:

    • 我正在索引其他网站,有时甚至 UTF-8 网站也有一些字符被 MySQL 变成问号。这甚至有意义吗?这是否意味着这是我处理它的方式的问题,或者这是否意味着这是他们一方的错误? (顺便说一句,这些字符在他们的网站上正确显示。)
    • 如果字符在他们的网站上正确显示,问题似乎出在你身上。您是从使用 utf-8 的网站获得?s 还是从使用其他字符集的网站获得?如果问题发生在其他字符集上,请确保在插入数据库之前将内容从其他字符集转换为 utf-8。
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2014-05-13
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多