`
Surmounting
  • 浏览: 65184 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL5.x处理中文全解

阅读更多

我这边用 Java 连接 MySQL 数据库,通过 JDBC 写入数据。在 Java 中直接生成的中文字符串,写入数据库变成半角问号“?”。以下是我解决此问题的记录。

首先,我用 Putty 这个工具连接 MySQL 以检查中文写入情况。这里有一个设置。此设置如果不对,则会导致乱码。

Putty 设定字符编码集的位置:Window - Translation - UTF-8

然后,MySQL 提供了关于字符集的很多变量。可以通过 MySQL 命令来查看。
输入命令:mysql> SHOW  VARIABLES  LIKE  '%char%'; 
会看到如下内容:
MySQL与字符集有关的应用变量,它们是:character_set_client, character_set_connection, character_set_database, character_set_filesystem, character_set_results, character_set_server, character_set_system, character_sets_dir
相信大家这些变量不全是 utf8 吧?比如有的是 'utf-8' ,有的是 'latin1' 一类的?全部都改成 'utf8' 才能保持一致,不出现乱码。
设置变量语句格式:mysql> SET  character_set_server='utf8';   将变量名一个个修改成值非 utf8 的那些,逐句执行就行。
另外除非全部系统 + 所有用户都是纯微软环境,否则不要使用微软推广的 GBK 字符集,不通用。

接 下来解释一下,为什么不能用 UTF-8 、utf-8 一类的名称,必须用 utf8 。大家可以看到 character_sets_dir 这个特变量。到其指定的目录中看一下,就会发现很多字符集文件。其中 Index.xml 是一个字符集名称的索引文件,里边有这么一段:
<charset name="utf8">   <family>Unicode</family>   <description>UTF-8 Unicode</description>   <alias>utf-8</alias>   <collation name="utf8_general_ci"     id="33">    <flag>primary</flag>    <flag>compiled</flag>   </collation>   <collation name="utf8_bin"            id="83">     <flag>binary</flag>     <flag>compiled</flag>   </collation> </charset>
咱们就是得让指定的字符集名称和这里设定的 charset name 保持一致。这里写为 utf8 ,所以咱们的变量都得设为 utf8 。

通过命令设置的变量,在重启之后会恢复原设置。所以我们可以考虑通过 my.cnf 文件来直接配置 MySQL 的这些变量。
在 改动配置文件之前,肯定要做文件整个的备份。这个文件不能乱改,我试验的结果,应该在 [client] 里边添加 default-character-set=utf8 ,在 [mysqld] 里边添加 character_set_server=utf8 ,然后保证最下边 [mysql] 里边存在一个 default-character-set=utf8 。进行这种设定之后重启 mysqld ,就不用每次开启 MySQL 重新设定这些变量了。

---------- ---------- ---------- ----------

数据库解决完了,接下来就是 Java 连接数据库的问题了。
JDBC 连接时,需要提供连接的 URL 。对于 MySQL 来说,这个连接应该设定几个参数:useUnicode=true&characterEncoding=UTF-8 。这个写法要严格一致,绝不能有偏差,比如把 UTF-8 写成 utf8 则会造成功能失常。如果没有别的连接参数,就用 ? 引导这二个参数,否则用 & 引导。

当然了,Java 里边的数据本身不能内容就是乱码。这个是另外的事情。只要保证 Java 运行时,监测变量的值本身不是乱码,就可以保证读写数据库不再是乱码了。


本文也发表在我于 CSDN 的日志: http://blog.csdn.net/shanelooli/article/details/7900276

0
6
分享到:
评论

相关推荐

    一台电脑同时安装MySQL5.x版本和MySQL8.x版本

    - 对于MySQL5.x:`mysqld --install MySQL5x --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.x\my.ini" --port=3307 --datadir="C:\ProgramData\MySQL\MySQL Server 5.x\Data"` - 对于MySQL8.x:`mysqld -...

    mysql-8.3.0-linux-glibc2.28-x86-64.tar.xz源代码安装包官网下载源 mysql8.X源代码

    “MySQL 8.X - 性能优化大师版”:强调 MySQL 8.X 版本带来的性能提升和优化功能。 “MySQL 8.X - 安全强化版”:突出 MySQL 8.X 版本在安全性方面的增强和改进。 “MySQL 8.X - 高效管理利器”:强调 MySQL 8.X ...

    mysql5.x最新版本驱动 mysql-connector-java-5.1.47.rar

    `mysql-connector-java-5.1.47`是针对MySQL 5.x版本的一个特定版本的驱动程序,它是Java Database Connectivity (JDBC) API的一部分,允许Java开发者在Java应用程序中执行SQL语句,管理数据库连接,以及处理数据库...

    mysql-8.4.0.tar.xz源代码安装包官网下载源 mysql8.X源代码

    “MySQL 8.X - 性能优化大师版”:强调 MySQL 8.X 版本带来的性能提升和优化功能。 “MySQL 8.X - 安全强化版”:突出 MySQL 8.X 版本在安全性方面的增强和改进。 “MySQL 8.X - 高效管理利器”:强调 MySQL 8.X ...

    MYSQL5.X新技术探索和实践

    MYSQL5.X新技术探索和实践,里面详述重要参数的配置,监控

    MySql5.x升级MySql8.x的方法步骤

    Mysql5.x与Mysql8.0.X的几点不同 application.properties的不同 被注释掉的对应 8.0.x 版本的内容. spring.datasource.driver-class-name=com.mysql.jdbc.Driver //spring.datasource.driver-class-name=...

    delphi-mysql5.x

    总结来说,"delphi-mysql5.x"的主题是关于在Delphi 7中利用DBExpress组件与MySQL 5.x数据库进行无缝集成,其中涉及的关键点包括DBExpress驱动、连接配置文件以及处理字符编码的注意事项。正确理解和应用这些知识点,...

    centos6 安装mysql5.6.x版本

    在Linux系统中,CentOS 6是一个非常流行的发行版,而MySQL 5.6.x是其常用的关系型数据库管理系统。本教程将详细讲解如何在CentOS 6上安装MySQL 5.6.x版本,并涉及如何自定义安装路径,以满足特定的需求。 1. **准备...

    mysql5.6.x版本的安装图解(64位)

    在64位操作系统环境下安装MySQL 5.6.x版本,可以充分利用系统资源,提供更强大的数据库处理能力。以下是对安装过程的详细解析: 1. **下载MySQL 5.6.x安装文件**: - 压缩包中的`mysql-5.6.28-winx64.msi`是MySQL ...

    centos7安装mysql5.x脚本

    本文将详细讲解如何使用脚本在CentOS 7上安装MySQL 5.x版本。 首先,安装MySQL 5.x需要确保系统是最新的。在终端中,输入以下命令来更新系统软件包: ```bash sudo yum update -y ``` 接着,我们需要添加MySQL的...

    mysql驱动5.x+8.x版本驱动

    mysql-connector-java-5.1.34.jar+mysql-connector-java-5.1.49.jar+mysql-connector-java-8.0.18.jar+mysql-connector-java-8.0.20.jar

    mysql5.x手册.rar

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系...

    mysql 5.7.x 所需mysqld.service文件

    mysql 5.7.x 所需mysqld.service文件

    C#连接MySQL需要的MySql.Data.dll,MySql.Web.dll

    5. **事务处理**:支持SqlTransaction,可以进行数据库事务的提交和回滚。 6. **数据元信息**:获取数据库、表、视图及列的信息。 其次,MySql.Web.dll主要为ASP.NET应用提供一些额外的服务,如角色管理和成员资格...

    基于Java+Springboot2.x+MySQL 8.x+Vu的培训机构(高中)排课系统源码+项目说明.zip

    基于Java+Springboot2.x+MyBatis-Plus+MySQL 8.x+Vue的培训机构(高中)排课系统源码+项目说明.zip基于Java+Springboot2.x+MyBatis-Plus+MySQL 8.x+Vue的培训机构(高中)排课系统源码+项目说明.zip基于Java+...

    mysql5.x和8.x的数据库驱动

    本文将详细探讨MySQL 5.x和8.x的数据库驱动,以及它们在使用过程中的差异。 首先,MySQL 5.x的驱动主要指的是`mysql-connector-java-5.1.41-bin.jar`,这是MySQL官方提供的Java数据库连接器,用于让Java应用程序与...

    MySql.Data.Entity.6.10.9 + MySql.Data.6.10.9

    5. **存储过程支持**:开发者可以通过EF调用MySQL的存储过程,使得复杂的数据库逻辑得以复用。 6. **异步操作**:支持异步API,可以在高并发场景下提高应用程序的响应速度,避免阻塞线程。 在压缩包的"packages...

    nacos1.x升级mysql8.x完整教程.txt

    这是因为,默认情况下,Nacos开启的是Embedded内嵌数据库,持久化开启后,从官网上下载的Nacos默认支持mysql5.X,对于高版本的mysql8.x由于驱动版本太低,是不支持。本文的目标就是让Nacos1.x支持mysql8.x

    学生考勤管理系统(jsp+ssh+mysql5.x)含文档

    学生考勤管理系统(jsp+ssh+mysql5.x)含文档;其系统功能如下:1.教师用户和学生用户都可以登录自己的登录界面进行查询信息,信息界面会显示出用户名、电话、邮箱、学号或教工号等信息。2.考勤情况登记时,教师可点...

    Mysql5.7.44.0 windows版 安装包

    Mysql5.7.44.0 windows版 安装包

Global site tag (gtag.js) - Google Analytics