MySQL字符集问题解决方法(包括改配置文件、命令行修改和JDBC的问题)

原创 2005年02月25日 19:29:00
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

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

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

上面列出的值就是系统的默认值。

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

SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

而MySQL数据库的4.1是一个分水岭,4.1直接支持Unicode,它以下版本支持的不好;

MySQL JDBC Driver的3.0.16也是一个分水岭,3.0.16版本会取数据库本身的编码,然后按照该编码转换,这种方式和Oracle的JDBC Driver是一样的。例如你的数据库是GBK编码的话,JDBC Driver就会把数据库里面的取出来的字符串按照GBK往unicode转换,送给JVM。因此正确的设置数据库本身的编码就尤为重要。

MySQL JDBC Driver3.0.16以下的版本则不然,它不会那么智能的根据数据库编码来确定如何转换,它总是默认使用ISO8859-1,因此你必须使用 characterEncoding=GBK来强制他把数据库中取出来的字符串按照GBK来往unicode转换。

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

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

2) 使用3.0.16以上版本的JDBC Driver,那么你就不需要再写什么characterEncoding=UTF-8

MySQL 配置文件中,字符集设置

1.linux环境下    vim /etc/my.cnf   2.mysql 5.5的版本 [client]    #linux环境下面设置此值   default-charact...
  • m582445672
  • m582445672
  • 2012年07月30日 00:03
  • 2733

mac下修改mysql默认字符集为utf8

1、首先检查默认安装的字符集 mysql> show variables like '%char%'; +--------------------------+-------------------...
  • u012959829
  • u012959829
  • 2015年03月30日 11:08
  • 3990

使用JDBC连接数据库遇到的问题,以及查找到的解决方法

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和...
  • jslkasd
  • jslkasd
  • 2015年03月12日 09:05
  • 622

Linux下mysql永久修改server字符集

系统是Ubuntu12.04 MySQL版本是5.5 如果是你是其他版本的MySQL,请绕行,我已经因为版本问题深受其害了  装MySQL的时候直接用的apt-get install mysql...
  • oThomasyang
  • oThomasyang
  • 2014年06月25日 10:40
  • 2252

linux 系统下修改Mysql默认字符集

linux系统版本Ubuntu 14.04.1   Mysql版本5.7.15      这几天在做管理系统时,做完之后放到前一段购买的腾讯云上测试,发现请求数据发送后显示为乱码,但是在本地测试时却...
  • jayzym
  • jayzym
  • 2016年10月04日 20:40
  • 4372

Java 原生态JDBC问题总结及MyBatis解决方法

原生态的JDBC中问题总结: 1:数据库连接,使用时就创建,不使用时就立即释放 ,对数据库进行频繁连接开启和关闭, 造成数据库资源浪费影像数据库性能。 2:将sql语句硬编码到JAVA代码,如果s...
  • CalvinKirs
  • CalvinKirs
  • 2017年01月27日 18:50
  • 167

SSH:修改数据库名,jdbc.properties也修改了,但是后发现指向还是旧数据库

google后发现是*.hbm.xml的问题,catalog配置了数据库名,如:    把catalog="database"去掉问题解决...
  • epfeng
  • epfeng
  • 2010年10月05日 17:35
  • 2389

Mysql 字符集老改不了的解决办法

网上很多教程教你修改mysql默认字符集,但是是不是怎么做都没用? 很可能你的database本身的字符集没有改。 最好在创建database时,使用命令CREATE DATABA...
  • fzl562410663
  • fzl562410663
  • 2015年01月20日 16:57
  • 1053

修改mysql数据库字符集为UTF8

一、修改my.ini配置文件(mysql配置文件) character_set_server = utf8 #设置字符集 重启mysql数据库服务 查看当前数据库字符集 show VARIABL...
  • u010969226
  • u010969226
  • 2015年03月09日 14:25
  • 9993

linux终端下修改文件名及文件内容的命令

1 修改文件名mv 旧文件名 新文件名2 修改文件内容直接使用vi,vim等编辑器。如果没有的话使用sudo ap-get install vim来获得...
  • mcy478643968
  • mcy478643968
  • 2010年11月10日 15:38
  • 25859
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL字符集问题解决方法(包括改配置文件、命令行修改和JDBC的问题)
举报原因:
原因补充:

(最多只允许输入30个字)