php代码中为解决乱码问题,执行数据库操作前执行了如下语句设置字符集:
mysql_query("SET NAMES utf8");结果在插入数据库中某字段数据时出现如下错误提示:
Incorrect string value: '\xB33\xB99[\xF9...' for column 'secret' at row 1secret字段为varchar类型  UTF-8编码
数据库默认字符集为 UTF-8如果将mysql_query("SET NAMES utf8");改为mysql_query("SET NAMES latin1");
则没有错误。插入的字符串由如下函数生成。是ASCII为0-255之间的一个长度为20的随机字符串。function mksecret($len = 20) {
    $ret = "";
    for ($i = 0; $i < $len; $i++)
        $ret .= chr(mt_rand(0, 255));
    return $ret;
}
UTF-8 应该涵盖了latin1字符集中的字符吧?为什么从latin1设为UTF-8时反而会提示有不可用字符呢?
UTF-8 处理不了ASCII中的控制符么?请大虾解答~万分感谢!!

解决方案 »

  1.   

    mysql> show variables like '%set%';
    +--------------------------+------------
    -----+
    | Variable_name            | Value
         |
    +--------------------------+------------
    -----+
    | auto_increment_offset    | 1
         |
    | character_set_client     | utf8
         |
    | character_set_connection | utf8
         |
    | character_set_database   | utf8
         |
    | character_set_filesystem | binary
         |
    | character_set_results    | utf8
         |
    | character_set_server     | utf8
         |
    | character_set_system     | utf8
         |
    | character_sets_dir       | E:\Program
    ets\ |
    +--------------------------+------------
    -----+
    9 rows in set (0.00 sec)mysql>
      

  2.   

    已解决。原因是页面文件中存在需要插入数据库的中文。而页面文件本身不是以UTF-8编码保存的。
      

  3.   

    最近好象 字符集的问题很多。看来有必要重新整理一份FAQ了。