<?php
$sql= "SELECT ID,username,nichen,gender,hangye FROM UserInfo WHERE gender = '男'";
mysql_connect("localhost", "root", "");mysql_select_db("mydb");mysql_query("set names gb2312");$result = mysql_query($sql);$recordnum = mysql_num_rows($result);echo ($recordnum);?>结果总是0,怎么办?注明一下,gender = '男' 已经验证是存在的,我已经
mysql>alter table UserInfo modify gender char(2) character set gb2312;怎么办????
$sql= "SELECT ID,username,nichen,gender,hangye FROM UserInfo WHERE gender = '男'";
mysql_connect("localhost", "root", "");mysql_select_db("mydb");mysql_query("set names gb2312");$result = mysql_query($sql);$recordnum = mysql_num_rows($result);echo ($recordnum);?>结果总是0,怎么办?注明一下,gender = '男' 已经验证是存在的,我已经
mysql>alter table UserInfo modify gender char(2) character set gb2312;怎么办????
改成这个
$sql= "SELECT ID,username,nichen,gender,hangye FROM UserInfo ";如果是1,说明是编码的问题。
如果是0,说明是程序有问题。文件编码改成gb2312吧
数据库这张表的编码没有设定,我只是对这个字段做了设定:
mysql>alter table UserInfo modify gender char(2) character set gb2312;页面的编码我不知道,我在一楼贴的就是全部的文件内容
+----+-------------+--------+--------+---------------+
| ID | username | nichen | gender | hangye |
+----+-------------+--------+--------+---------------+
| 11 | [email protected] | rrr | 男 | |
| 12 | [email protected] | ttt | 男 | |
| 16 | [email protected] | fff | 男 | ???(??/??/??) |
+----+-------------+--------+--------+---------------+
3 rows in set (0.00 sec)
mysql> SELECT ID,username,nichen,gender,hangye FROM UserInfo WHERE gender = '男';
可以得到正确结果
那么
请注释掉 php 程序中的
mysql_query("set names gb2312");
注释掉就会有错误输出:
Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
mysql_select_db("mydb");
mysql_query("set names gb2312");
$result = mysql_query($sql);
$r = mysql_fetch_assoc($result);echo base64_encode($r['gender']);贴出结果
echo base64_encode('男');
贴出结果
这是 utf-8 编码的 男 的 base64 编码结果既然你连数据库都是 gb2312 的,那为什么程序文件要用 utf-8 编码保存呢?
如果是要所谓的“国际化”,那么需将
mysql_query("set names gb2312");
改成
mysql_query("set names utf8");set names charset 这条 SQL 指令是通知 mysql 其后的交互将用什么编码进行
mysql 会根据字段的编码自动转换编码
1)
mysql> create database mydb2;
Query OK, 1 row affected (0.02 sec)mysql> use mydb2;
Database changedmysql> create table userinfo(
-> id int unsigned auto_increment primary key,
-> username char(10),
-> gender char(2)
-> ) character set utf8;mysql> insert into userinfo set username = 'aaa',gender = '男';
Query OK, 1 row affected (0.03 sec)mysql> select * from userinfo;
+----+----------+--------+
| id | username | gender |
+----+----------+--------+
| 1 | aaa | 男 |
+----+----------+--------+
1 row in set (0.00 sec)2)
新建test3.php,使用当前语系utf-8保存:
<?php
mysql_connect('localhost','root','');
mysql_select_db('mydb2');
mysql_query("set names utf-8");
$result = mysql_query("select * from userinfo where id = 1");
$row = mysql_fetch_array($result);
echo base64_encode($row['gender']);
echo base64_encode("男");
?>输出结果:
Pw==55S3
echo base64_encode($row['gender']);
echo base64_encode("男");输出结果:
55S355S3echo ($row['gender']);
echo ("男");输出结果:
鐢风敺怎么办???