mysql_query('set names utf8');
//测试插入中文
mysql_query('insert into test(`comment`) values(\'我是坏人\')' );
//读出中文
$rs=mysql_query('select comment from test order by id asc limit 1');
$data=mysql_fetch_array($rs,MYSQL_ASSOC);
print_r($data);表test的字段comment 的编码是latin1_general_ci问题是:
每次我插入的中文数据读出来的都是问号?????????????
如果删除mysql_query('set names utf8'); 问题同样存在。
如果改成 mysql_query('set names latin1');读写就没问题了。我想知道的是 是不是就是这样的。
还是我什么没设置好。导致以utf8格式将数据保存到latin编码的字段里的都是问号
存读取数据(数据库)与页面文件和浏览器不一致将导致中文乱码
大哥,不是我想,是网站代码本来就这样的我现在基本能确定,数据库中使用latin1的字段存入的非英文编码数据已经损坏了。
第一句应该是这样的吧
还要你的数据库表也是utf-8的
现在问题已经解决了。确定写入数据库中latin1字段的非英文编码数据都是顺坏的。读出来的都是问号。
现在总结下,各位看下是否有误。
mysql默认编码是utf8 所以如果不使用 mysql_query('set names latin1');//这里我默认为latin1。那你 写入数据库中latin1编码字段非英文损坏,不可恢复。
所以我修改数据库编码很放心的用一条命令解决。很省心,省事
define('SERVER', 'localhost');
define('SERVER_USERNAME', 'root');
define('SERVER_PASSWORD', 'root');
define('SERVER_DATABASE', 'teststructrue');$db = mysql_connect(SERVER,SERVER_USERNAME,SERVER_PASSWORD) or die (mysql_error());mysql_select_db(SERVER_DATABASE,$db) or die (mysql_error());//teststructrue$table_list = mysql_query('show tables');while($table = mysql_fetch_array($table_list,MYSQL_NUM)){
$ts = mysql_query("ALTER TABLE `".$table[0]."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
if(!$ts) {
updateBaseLog('table_error:`'.$table[0].'`--'.mysql_error());
}
}mysql_query("ALTER DATABASE `".SERVER_DATABASE."` CHARACTER SET utf8 COLLATE utf8_general_ci");function updateBaseLog($info){
file_put_contents('updateBase.log', $info."\n", FILE_APPEND);
}