php代码中为解决乱码问题,执行数据库操作前执行了如下语句设置字符集: 
mysql_query("SET NAMES utf8"); 结果在插入数据库中某字段数据时出现如下错误提示: 
Incorrect string value: '\xB33\xB99[\xF9...' for column 'secret' at row 1 secret字段为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:\Programets\ |
    +--------------------------+-----------------+
    9 rows in set (0.00 sec)mysql>
      

  2.   

    字符编码问题,如果统一都设置为 utf-8,也不会出现在这么多问题了。
      

  3.   

    谢谢,已解决。原因是页面文件中存在中文。而文件不是以UTF-8编码保存的。