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中的控制符么? 请大虾解答~万分感谢!!
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中的控制符么? 请大虾解答~万分感谢!!
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>