mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码,

作者&投稿:空胜 (若有异议请与网页底部的电邮联系)
使用JDBC向mysql数据库插入中文乱码如何解决?url、数据库属性和workspace的编码库均设成utf-8,始终乱码~

String sql ="insert into userinfo(name,pwd) values(?,?)";
PreparedStatement pst=getConnection().prepareStatement(sql);
pst.setString(1,"小明");
pst.setString(2,"123");
pst.executeUpdate();
小伙子给你写了一个通用的增删改查的工具类,你那样写太麻烦
资源文件jdbc.properties
jdbc.Driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/xxxjdbc.username=rootjdbc.password=root
package com.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.Properties;import org.apache.commons.beanutils.BeanUtils;import org.apache.log4j.Logger;public class BaseDao { private static String DRIVDR; private static String URL; private static String USER; private static String PWD; private static Connection connection; private static Properties properties = new Properties(); private static Logger logger = Logger.getLogger(BaseDao.class); private static PreparedStatement pst; private static ResultSet rs; private static final String CLASS_NOT_EXCEPTION = "驱动加载失败"; static { try { properties.load(BaseDao.class.getResourceAsStream("/jdbc.properties")); DRIVDR = properties.getProperty("jdbc.Driver"); URL = properties.getProperty("jdbc.url"); USER = properties.getProperty("jdbc.username"); PWD = properties.getProperty("jdbc.password"); Class.forName(DRIVDR); } catch (Exception e) { logger.debug(CLASS_NOT_EXCEPTION + e.getMessage()); } } /** * 通用的增删改 * * @param sql * @param args * @return */ public static int executeCommand(String sql, Object... args) { int m = 0; try { initPreparedStatement(sql, args); m = pst.executeUpdate(); } catch (Exception e) { logger.debug("执行增、删、该。错误。。请检查preparedStatement参数。。。"+e.getMessage()); } finally { closeAll(null, pst, connection); } return m; } private static PreparedStatement initPreparedStatement(String sql,Object...args){ try { pst=getConnection().prepareStatement(sql); if(args!=null){ for(int i=0;i T findById(String sql,Class clazz,Object...args){ T t = null; try { initPreparedStatement(sql, args); rs = pst.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); // 以上的代码:获取元数据(各个字段的数据类型) int count = metaData.getColumnCount(); // 获取字段的数量 if(rs.next()) { try { t = clazz.newInstance();// 利用反射自动创建对象的类型的对象 User.class User // u=new User(); for (int i = 1; i List findAll(String sql, Class clazz, Object... args) { List list = new ArrayList(100); T t = null; try { initPreparedStatement(sql, args); rs = pst.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); // 以上的代码:获取元数据(各个字段的数据类型) int count = metaData.getColumnCount(); // 获取字段的数量 while (rs.next()) { try { t = clazz.newInstance();// 利用反射自动创建对象的类型的对象 User.class User // u=new User(); for (int i = 1; i <= count; i++) { BeanUtils.copyProperty(t, metaData.getColumnName(i), rs.getObject(i)); // 自动获取各个字段的名称并获取该字段的值 } } catch (Exception e) { logger.debug("查询集合,错误。。。。。"+e.getMessage()); } list.add(t);// 将对象添加到集合中 } } catch (SQLException e) { logger.debug("查询失败。。。。。" + e.getMessage()); } return list; } public static Connection getConnection() { try { if (connection == null || connection.isClosed()) { connection = DriverManager.getConnection(URL, USER, PWD); } } catch (SQLException e) { logger.debug("获取connection失败,请检查配置文件!" + e.getMessage()); } return connection; } public static void closeAll(ResultSet rs, PreparedStatement pst, Connection conn) { if (rs != null) try { rs.close(); } catch (SQLException e) { logger.debug("关闭ResultSet错误。。。。。" + e.getMessage()); } if (pst != null) try { pst.close(); } catch (SQLException e) { logger.debug("关闭PreparedStatement错误。。。。。" + e.getMessage()); } if (conn != null) closeConnection(conn); } private static void closeConnection(Connection conn) { try { if (!conn.isClosed()) { conn.close(); } } catch (SQLException e) { logger.debug("关闭Connection错误。。。。。" + e.getMessage()); } finally { conn = null; } } public static void main(String[] args) { System.out.println(BaseDao.getConnection()); }}

插入的数据乱码有很多原因:
1、你要检查一下页面的编码和数据库设置的字符集是否一样,要么都是utf8,要么都是gbk的
2、如果第一点说的两边编码是统一的,你可以在链接数据库的时候加上mysql_query("set names utf8")
3、加上之后还是不行的话,在检查你的页面编码,如果是utf8的话,请选择没有bom的utf8编码
4、以上都没问题的话,还出现乱码的话,修改mysql的配置文件,my.ini加上character-set-server=utf8,然后重启mysql服务就可以了
一般出现乱码的话,基本就是这些原因了

MYSQL 字符集问题

MySQL的字符集支持(Character Set Support)有两个方面:

字符集(Character set)和排序方式(Collation)。

对于字符集的支持细化到四个层次:

服务器(server),数据库(database),数据表(table)和连接(connection)。

1.MySQL默认字符集

MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;

(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;

(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;

(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;

(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)

通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+---------------------------------+

| Variable_name | Value |

+--------------------------+---------------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

mysql> SHOW VARIABLES LIKE 'collation_%';

+----------------------+-----------------+

| Variable_name | Value |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database | utf8_general_ci |

| collation_server | utf8_general_ci |

+----------------------+-----------------+

3.修改默认字符集

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,

如 default-character-set = utf8

character_set_server = utf8

修改完后,重启mysql的服务,service mysql restart

使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8

+--------------------------+---------------------------------+

| 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 |

| character_sets_dir | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

(2) 还有一种修改字符集的方法,就是使用mysql的命令

mysql> SET character_set_client = utf8 ;

mysql> SET character_set_connection = utf8 ;

mysql> SET character_set_database = utf8 ;

mysql> SET character_set_results = utf8 ;

mysql> SET character_set_server = utf8 ;

mysql> SET collation_connection = utf8 ;

mysql> SET collation_database = utf8 ;

mysql> SET collation_server = utf8 ;

一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';它相当于下面的三句指令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

总结:

因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.

总结:你的字符集假如是gbk 就改gbk 这应该与你的web project中的所用的字符集一致 utf-8只是举例用的 要支持中文建议用gbk(繁简) gb2312(简)

建数据库的时候选择正确的字符集,还有,程序里最好做必要的转码

重新配置下,选第二个“日本”的那个字符编码
还有数据库连接的ur改下con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=fang&useUnicode=true&characterEncoding=UTF-8");后面的useUnicode=true&characterEncoding=UTF-8一定要加上
再试试看咯!

因为utf8就是容易出现乱码。


mysql 创建的数据库在硬盘什么位置?
默认在安装目录下 不过建库的时候可以手动选择路劲

数据库之:Mysql数据库服务器安装与配置
MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。它具有以下特性:1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性2.支持AIX、FreeBSD、HP-UX、...

怎么在cmd查看电脑是否安装mysql数据库
1. 打开命令提示符(cmd):在Windows操作系统中,可以按下Win键 R,然后输入“cmd”并按下回车键打开命令提示符。2. 输入MySQL的安装目录:假设MySQL数据库安装在默认目录下(C:\\Program Files\\MySQL\\MySQL Server),则在命令提示符中输入以下命令:```cd C:\\Program Files\\MySQL\\MySQL Server\\bin ...

windows怎么安装mysql
5、选择网站并发连接数,同时连接的数目,“DecisionSupport(DSS)\/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,自己输一个数)”。6、是否启用TCP\/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,在这个页面上,您还...

如何在win10上安装mysql数据库
MySQL是一个开源的关系型数据库,是最受欢迎的开源软件之一,现在很多网站都用MySQl。有的用户由于工作需要,想在win10上安装mysql数据库,这要怎么操作?电脑小白肯定不太明白。因此,这里详细教您在win10上安装mysql数据库的方法。具体方法如下:1、双击mysql-installer-community-5.7.20.0.msi安装包。...

win7系统下如何安装mysql数据库|win7系统安装mysql数据库的方法
本文教程小编分享win7系统安装mysql数据库的方法,是什么?MySQL是一个小型关系型数据库管理系统,许多中小型企业选择了MySQL作为网站数据库。但新手用户不知道如何在win7系统下安装mysql数据库,所以本教程向大家分享win7系统安装mysql数据库的方法,感兴趣或有需要的用户可以参考下面教程安装。推荐:win7旗舰...

如何安装mysql服务
我刚开始安装mysql的时候,在windows的服务里面可以看到,但是装了以后有一段时间没有用它了,我在准备从windows的服务里面启动mysql服务的时候,发现没有mysql的服务了,那我的解决办法就是: 1.如果你没有安装mysql数据库的话,就先安装mysql服务 2.在就在mysql的安装目录下面的bin目录下面,找的mysqld...

centos安装mysql数据库的方法
1、首先下载MySQL的安装文件,我这里安装的是MySQL5.1.7版本的,2、安装MySQL数据库服务器进入安装包所在文件夹,执行命令 rpm -ivh MySQL-server-5.1.7-0.i386.rpm 安装MySQL服务器。如果报了与原先版本冲突的话,就执行rpm -qa|grep -i mysql命令,会显示已安装的Mysql版本,我的显示mysql-libs-5.1.61-4.el6....

如何在服务器上安装mysql数据库
方法\/步骤 1、刚刚接触mysql数据的人,第一步新建数据库,可打开phpmyadmin;2、然后选择数据库菜单;3、点击sql菜单;4、在输入框中输入下面语句 create database 数据库名;最后点执行,新数据库就建好了。

mysql数据库,我自己新建的数据库保存在哪个文件里啊?
在 mysql安装目录下面有一个 data 文件夹 下面放的就是数据库文件,比如你刚才建的数据库名字叫 test 那么在 data 文件夹下面就有一个文件夹叫 test,这么文件夹内放的文件就是test数据库的所有文件。--- 以上,希望对你有所帮助。

吉木乃县15660751397: 在安装mysql 时,开始3306,输入 /etc/rc.d/init.d/iptables: 没有那个 文件或目录 -
龚曲小儿: 安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件;由于linux下MySQL的默认安装目录分布在不同的文件下;不像windows一样放在同一目录下,只需修改其中的my.ini文件...

吉木乃县15660751397: 如何设置Mysql数据库默认的字符集编码为GBK -
龚曲小儿: 1、更改服务器的编码方式,在终端输入以下命令: mysqld --character-set-server=gbk --collation-server=gbk_chinese_ci; 2、更改某个数据库的编码方式 mysql -u root -p alter database character set gbk collate gbk_chinese_ci; 3、在创建数据...

吉木乃县15660751397: mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码, -
龚曲小儿: MYSQL 字符集问题MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(...

吉木乃县15660751397: mysql数据库如何设置默认字符集? -
龚曲小儿: 通过mysql命令修改: 修改数据库的字符集mysql>use mydbmysql>alter database mydb character set utf-8; 创建数据库指定数据库的字符集mysql>create database mydb character set utf-8;通过配置文件修改: 修改/var/lib/mysql/mydb/db....

吉木乃县15660751397: 请问在安装MySQL5.5的时候选择哪种字符集比较好啊?是GBK还是UTF - 8? -
龚曲小儿: UTF-8包括了GBK字符集,所以前者兼容性更好,国内一般仅仅使用GBK足够,如果不想以后迁移转换数据很麻烦,就UTF-8另外这个字符集是可以修改的,安装的时候多支持两个没错.手动编译安装的mysql最近在某些系统爆出漏洞,尝试256次密码错误也可以登录进入,你注意下这个问题

吉木乃县15660751397: mysql怎么更改数据库默认字符集 -
龚曲小儿: 但是遗憾的是,很多人编译安装MySQL的时候没有指定这两个参数,大多数人更是通过二进制程序的方式安装,那 么这时候MySQL的默认字符集是latin1.而这时候我们仍然可以指定MySQL的默认字符集,通过my.cnf文件增加 两个参数: 1.在[...

吉木乃县15660751397: mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码,
龚曲小儿: 重新配置下,选第二个“日本”的那个字符编码 还有数据库连接的ur改下con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&amp;password=fang&amp;useUnicode=true&amp;characterEncoding=UTF-8");后面的useUnicode=true&amp;characterEncoding=UTF-8一定要加上 再试试看咯!

吉木乃县15660751397: 为什么Mysql默认的字符集都是latin1 -
龚曲小儿: MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集、查看 MySQL 数据库字符集,以及数据表和字段的字符集、当前安装的 MySQL 所支持的字符集等.

吉木乃县15660751397: 安装mysql 怎样设置编码方式 -
龚曲小儿: 你安装地是集成安装包地话,可以直接找到mysql设置编码修改,如果是自己安装地就需要命令修改,先show variables命令可查看mysql数据库的默认编码:找到客户端配置[client] 在下面添加 default-character-set=utf8 默认字符集为utf8 在找到[mysqld] 添加 default-character-set=utf8 默认字符集为utf8 init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行) 这个方法 修改之后默认的编码方式还latin1

吉木乃县15660751397: mysql 中文不显示 -
龚曲小儿: MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection).1.MySQL...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网