MySql条件查询不到数据 → 更改数据库编码
2017-02-14 12:08
495 查看
最近在弄一个后台服务器的时候,出现一个问题。在访问一个servlet的时候,怎么都不给我返回数据,于是打开服务器代码追查原因,里面很简单的代码,只是一些很简单的逻辑,再有就是对数据库MySql的条件查询。只不过条件值是汉字,语句如下:
然而通过Navicat premium查看该表是存在小明这个同学的。
通过Navicat premium执行SQL语句也是可以查到的。
这时我就晕了,都能查到,为什么代码里面就不行了。
先冷静一下,问题可能出在两个地方:代码有问题、数据库可能存在问。
还是先找代码,找了半天也没发现问题。于是只能追查数据库了,我使用命令行模式打开数据库,将SQL语句复制到命令行查询
结果通过以上的语句还是没能查出对应的数据,那就能把问题锁定了,问题肯定出在数据库。
再通过查询student表的所有内容:
通过上面的查询,问题找到了,原来是乱码了。先不管那么多查看下该数据库的编码
这里我们可以看到是latin1编码,那就把这个编码该成utf-8的;
好了,修改成功。也可以通过Navicat premium 右键点击test数据库–>数据库属性 进行查看和编辑。
修改完成,查看一下效果。结果还是发生乱码。再看下数据库的编码,是不是安装的时候手快把编码搞错了。那么先看下数据库的编码
通过上面的信息可以看到 Server 、Client 、Conn. 编码方式都有问题。
打开mysql的安装目录,找到my.ini文件修改default-character-set=latin1为default-character-set=utf8
再查看一下编码
可以看到只有Server,那我们在查看一下数据库
还是乱码,只是没有出现问号了,那我们就再改下Server编码,下面有两种方法更改:
1.在[mysqld]的段中加上一句:character_set_server=utf8 –> 重启服务
2.运行 安装目录\bin下面的MySQLInstanceConfig.exe重新配置
完成上面的操作,再通过访问上面的servlet就大功告成了。
select * from student where name='小明';
然而通过Navicat premium查看该表是存在小明这个同学的。
通过Navicat premium执行SQL语句也是可以查到的。
这时我就晕了,都能查到,为什么代码里面就不行了。
先冷静一下,问题可能出在两个地方:代码有问题、数据库可能存在问。
还是先找代码,找了半天也没发现问题。于是只能追查数据库了,我使用命令行模式打开数据库,将SQL语句复制到命令行查询
C:\Users\Administrator>mysql -u root -p Enter password: ****** mysql> use test Database changed mysql> select * from student where name='小明'; Empty set (0.00 sec)
结果通过以上的语句还是没能查出对应的数据,那就能把问题锁定了,问题肯定出在数据库。
再通过查询student表的所有内容:
mysql> select * from student; +------+------+----+ | name | age | id | +------+------+----+ | ?? | 12 | 1 | | ?? | 13 | 2 | +------+------+----+ 2 rows in set (0.00 sec)
通过上面的查询,问题找到了,原来是乱码了。先不管那么多查看下该数据库的编码
mysql> use test //切换到test数据库 Database changed mysql> show variables like 'character_set_database'; //查看当前数据库的字符编码 +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | character_set_database | latin1 | +------------------------+--------+ 1 row in set (0.00 sec)
这里我们可以看到是latin1编码,那就把这个编码该成utf-8的;
mysql> alter database test CHARACTER SET utf8; //将test数据库编码修改为utf8 Query OK, 1 row affected (0.00 sec) mysql> show variables like 'character_set_database'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | character_set_database | utf8 | +------------------------+-------+ 1 row in set (0.00 sec)
好了,修改成功。也可以通过Navicat premium 右键点击test数据库–>数据库属性 进行查看和编辑。
修改完成,查看一下效果。结果还是发生乱码。再看下数据库的编码,是不是安装的时候手快把编码搞错了。那么先看下数据库的编码
mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32) Connection id: 3 Current database: test Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.18-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: latin1 /* 编码有问题 */ Db characterset: utf8 Client characterset: latin1 /* 编码有问题 */ Conn. characterset: latin1 TCP port: 3306 Uptime: 6 min 33 sec
通过上面的信息可以看到 Server 、Client 、Conn. 编码方式都有问题。
打开mysql的安装目录,找到my.ini文件修改default-character-set=latin1为default-character-set=utf8
再查看一下编码
mysql> status -------------- mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32) Connection id: 1 Current database: test Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.18-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: latin1 /* 编码有问题 */ Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 56 sec
可以看到只有Server,那我们在查看一下数据库
mysql> select * from student; +--------+------+----+ | name | age | id | +--------+------+----+ | 灏忔槑 | 12 | 1 | | 灏忚姳 | 13 | 2 | | 灏忓垰 | 14 | 3 | +--------+------+----+ 3 rows in set (0.02 sec)
还是乱码,只是没有出现问号了,那我们就再改下Server编码,下面有两种方法更改:
1.在[mysqld]的段中加上一句:character_set_server=utf8 –> 重启服务
2.运行 安装目录\bin下面的MySQLInstanceConfig.exe重新配置
完成上面的操作,再通过访问上面的servlet就大功告成了。
相关文章推荐
- MySQL 设置数据按条件查询下的序号 并存入数据库
- 对MYSQL查询中有疑问的数据进行编码
- MySQL、MS SQL、Oracle三种数据库查询M到N行数据
- 数据值为NULL,导致条件查询不到正确结果,ISNULL函数的使用解决问题
- MySql数据查询的逻辑蕴含条件问题
- 查询数据库中满足条件的特定行数据
- 从EXCEL导入数据到数据库,查询不到。
- MySQL跨数据库查询数据
- mysql查询数据库所有表的数据量
- s2sh向数据库插入数据,控制台有打印sql语句,数据库查询不到数据问题
- 查询数据库中满足条件的特定行数据
- mysql 从运行里面查询数据库里面的数据
- MySQL、MS SQL、Oracle三种数据库查询M到N行数据 分类: 数据库 2009-11-10 23:33 688人阅读 评论(0) 收藏
- MySQL 设置数据按条件查询下的序号
- 关于从sql*plus中往数据库插入数据却查询不到的原因
- SQL、MySQL、Oracle、 Sqlite、Informix数据库查询指定条数数据的方法
- mysql中修改数据库,数据库表,数据库表字段的编码问题
- 如何查询Oracle,Sql Server,MySQL 中的数据库名称、数据表名称、字段名称
- MySql,hibernate查询数据库的时候出现表查不到的错误
- 文件类型的数据插入不到数据库(mySql)