连接mysql乱码及mysql[ERROR 1366 (HY000):错误]
version:mysql-essential-5.1.36
在 MySQL Command Line Client显示中文一切正常;
在eclipse中新工程,连接到mysql,读取一个表显示:
代码:
package com.mch.mysql;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Mysql1 { public static void main(String[] args) { String url ="jdbc:mysql://localhost/test"; String user="root"; String password="******"; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection conn= DriverManager.getConnection(url,user,password); Statement stmt = conn.createStatement(); ResultSet rs= stmt.executeQuery("select * from pet"); while(rs.next()){ System.out.print("name:" + rs.getString(1)); System.out.print("/t所有者:" + rs.getString(2)); System.out.print("/tbirth:" + rs.getString("birth")); System.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } |
显示乱码?号.
name:?í?í所有者:??????birth:2007-08-21
name:????所有者:??????birth:2007-06-12
name:??所有者:??????birth:2007-08-21
name:°???所有者:????birth:1999-03-30
name:Puffball所有者:Dianebirth:1999-03-30
在网上查了下,很多人都有这个问题,大部分人说修改my.ini文件,
//原文件
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
【连接mysql乱码及mysql[ERROR 1366 (HY000):错误]】default-character-set=latin1
我把:default-character-set=utf-8[两处,大小写都试过]
mysql不能启动.
再改成default-character-set=gb2312
可以正常启动,
但在MySQL Command Line Client显示乱码,
eclipse输出也是码乱.
查了下mysql支持字符集,得到default-character-set=utf8
要这样设置,中间没有杠[-],
查看mysql使用的编码:
引用:
mysql> show variables like 'character/_set/_%';
+--------------------------+--------+
| Variable_name| Value|
+--------------------------+--------+
| 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|
+--------------------------+--------+
7 rows in set (0.00 sec)
mysql>
插入数据:
引用:
mysql> insert into event values("猪猪",'2009-02-21',"发烧","打针就好了!");
ERROR 1366 (HY000): Incorrect string value: '/xD6/xED/xD6/xED' for column 'name' at row 1
mysql> insert into event values("zhu",'2009-02-21',"fashao","da zhen jiu hao le!");
Query OK, 1 row affected (0.06 sec)
插入中文失败,
插入英文可以.
查看看显示:
引用:
mysql> select * from pet
-> ;
+----------+--------------+----------+------+------------+-------+
| name| owner| species| sex| birth| death |
+----------+--------------+----------+------+------------+-------+
| 脰铆脰铆| 脥玫脮帽露芦| 脰铆| n| 2007-08-21 | NULL|
| 鲁卢鲁卢| 脥玫脮帽露芦| 鹿路| n| 2007-06-12 | NULL|
| 脫茫| 脥玫脮帽露芦| 脫茫| t| 2007-08-21 | NULL|
| 掳垄脜拢| 脩么脥镁| 脜拢| F| 1999-03-30 | NULL|
| Puffball | Diane| hamster| f| 1999-03-30 | NULL|
| bile| Hane| defaster | f| 2004-09-30 | NULL|
+----------+--------------+----------+------+------------+-------+
6 rows in set (0.00 sec)
另默认的那个字符集是8859-1,在这个状态下可以输入汉字.
很怪,可能很简单,新手就是不会......
再次作测试:
default-character-set=gb2312
ERROR 1366 (HY000): Incorrect string value: '/xB9/xD8/xD3/xF0' for column 'name' at row 1
向表中插入中文字符时,出现错误。
mysql> select * from pet;
+--------+--------+---------+------+------------+------------+
| name| owner| species | sex| birth| death|
+--------+--------+---------+------+------------+------------+
| ?í?í | ?????? | ?í| ?| 2007-08-21 | 0000-00-00 |
| ????| ?????? | ??| ?| 2007-06-12 | 0000-00-00 |
| ??| ?????? | ??|| 2007-08-21 | 0000-00-00 |
+--------+--------+---------+------+------------+------------+
3 rows in set (0.02 sec)
表中的中文字符位乱码。
解决办法:
使用命令:
mysql> status;
--------------
C:/Program Files/MySQL/MySQL Server 5.1/bin/mysql.exeVer 14.14 Distrib 5.1.36
for Win32 (ia32)
Connection id:1
Current database:test1
Current user:root@localhost
SSL:Not in use
Using delimiter:;
Server version:5.1.36-community MySQL Community Server (GPL)
Protocol version:10
Connection:localhost via TCP/IP
Server characterset:gb2312
Dbcharacterset:latin1
Client characterset:gb2312
Conn.characterset:gb2312
TCP port:3306
Uptime:6 min 31 sec
Threads: 1Questions: 15Slow queries: 0Opens: 20Flush tables: 1Open ta
les: 9Queries per second avg: 0.38
--------------
查看mysql发现Db characterset的字符集设成了latin1,所以出现中文乱码。
更改表的字符集。
mysql> alter table pet character set gb2312;
------------------------------+
| pet| CREATE TABLE `pet` (
`name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
`owner` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
`species` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
`sex` char(1) CHARACTER SET latin1 DEFAULT NULL,
`birth` date DEFAULT NULL,
`death` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+-------+--------------------------------------------------------
查看表的结构:
mysql> show create table pet;
--------------------------------------+
| pet| CREATE TABLE `pet` (
`name` char(20) DEFAULT NULL,
`owner` char(20) DEFAULT NULL,
`species` char(20) DEFAULT NULL,
`sex` char(1) CHARACTER SET latin1 DEFAULT NULL,
`birth` date DEFAULT NULL,
`death` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+-------+---------------------------------------------
mysql> desc pet;
+---------+----------+------+-----+---------+-------+
| Field| Type| Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name| char(20) | YES|| NULL||
| owner| char(20) | YES|| NULL||
| species | char(20) | YES|| NULL||
| sex| char(1)| YES|| NULL||
| birth| date| YES|| NULL||
| death| date| YES|| NULL||
+---------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
这时向表中插入中文然后有错误。
mysql> INSERT INTO pet VALUES ('猪八戒','唐僧','神仙','f','2001-12-01',NULL);
ERROR 1366 (HY000): Incorrect string value: '/xD6/xD0/xCE/xC4' for column 'name' at row 1
还要更改pet表三个列的字符集。
因为表中已经有数据,所以更改字符集的操作失败,
清空pet表中的数据
mysql> truncate table users;
再更新三个字段的字符集:
mysql>alter table pet modify name char(20) character set gb2312;
mysql>alter table pet modify owner char(20) character set gb2312;
mysql>alter table pet modify species char(20) character set gb2312;
这时再插入中文字符,成功。
mysql> INSERT INTO pet VALUES ('猪八戒','唐僧','神仙','f','2001-12-01',NULL);
Query OK, 1 row affected (0.05 sec)
mysql> select * from pet;
+--------+-------+---------+------+------------+-------+
| name| owner | species | sex| birth| death |
+--------+-------+---------+------+------------+-------+
| 猪八戒 | 唐僧| 神仙| f| 2001-12-01 | NULL|
+--------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)
总之修改久的表编码不够,还要修改列的..................
推荐阅读
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- Android|Android BLE蓝牙连接异常处理
- mysql|InnoDB数据页结构
- mysql中视图事务索引与权限管理
- MYSQL主从同步的实现
- MySQL数据库的基本操作
- springboot整合数据库连接池-->druid
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统