使用mysql/MariaDB数据库插入中文,查询发现乱码?
mariaDB [lhc]> select * from python_test;
+----+-----------+------------+
| id | name | class_time |
+----+-----------+------------+
| 1 | ?? | 3 |
| 2 | ?? | 2 |
| 3 | ?? | 5 |
| 4 | ??? | 2 |
| 5 | ??? | 2 |
+----+-----------+------------+
5 rows in set (0.00 sec)
原来是编码设置有问题。查看下MariaDB的默认编码格式
MariaDB [lhc]> show variables like "character_set_%" ;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
将数据库以及表的编码均按照如下修改,然后重新插入数据到表中,即可
/*修改数据库编码*/
MariaDB [lhc]> ALTER database python_test character set utf8;
/*修改表的编码*/
MariaDB [lhc]> ALTER table python_test character set utf8;
再查询,结果正常了。
不过通过java操作MYSQL数据库,显示在WEB页面上,还是乱码,这是怎么回事呢?
原来问题出在HttpServletResponse上。在返回结果之前,应当加一句:response.setCharacterEncoding("utf-8");
当然,在使用get或者post获取传来的参数,也需要使用request.setCharacterEncoding("UTF-8"),以免乱码。