删除无法识别的字符而不是存储问号

时间:2011-09-15 13:28:00

标签: mysql utf-8 character-encoding

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

1 个答案:

答案 0 :(得分:1)

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

这个问题听起来好像你错过了在某个地方指定一个字符编码,所以使用了客户端的默认设置(你没有说客户端 - 也许是用户浏览器?)似乎是大多数情况下都是8或者兼容的东西 - 但有时会出现一个带有异国情调的默认字符集,这会让你遇到问题。

要解决此问题,只需确保将字符编码设置为 utf-8 everythere

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