mysql 中文支持
show variables like 'character%';
SHOW VARIABLES LIKE 'collation_%';
recommend to use utf8mb4 instead of utf 8, please refer to the following page for detailed reason.
https://mathiasbynens.be/notes/mysql-utf8mb4
本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题。一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多。
MySQL默认编码是latin1
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\share\charsets\ |
+--------------------------+--------------------------+
创建数据表并插入数据
. mysql> use test;
mysql> create table messages (
-> id int() unsigned auto_increment primary key,
-> message varchar() not null
-> ) engine=myisam default charset=utf8;
mysql> insert into messages (message) values ("测试MySQL中文显示");
mysql> select * from messages;
+----+-------------------+
| id | message |
+----+-------------------+
| | 测试MySQL中文显示 |
+----+-------------------+
编写程序(Java)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into messages (message) values ('测试MySQL编码')");
ResultSet rs = stmt.executeQuery("select * from messages");
while (rs.next()) {
int id = rs.getInt("id");
String message = rs.getString("message");
System.out.println(id + " " + message);
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
程序输出
????MySQL????????
??MySQL??
我们看到,尽管使用数据库时我们能够正常的添加和显示中文,但是在使用程序连接数据库时并不能够正常显示中文,为此我们需要修改MySQL的默认编码,编辑my.ini(MySQL配置文件)(如果是maria db ,配置文件是 /etc/mysql/conf.d/mariadb.cnf)文件对编码进行修改
设置MySQL的默认字符集为utf8,找到客户端配置[client]在下面添加。
default-character-set=utf8mb4
找到服务器配置[mysqld]在下面添加
default-character-set=utf8mb4
collation-server = utf8mb4_unicode_ci
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
设定MySQL数据库以utf8编码运行,连接MySQL数据库时使用utf8编码
停止和重新启动MySQL
net stop mysql
net start mysql
//实际上,最新mySQL以上两句已经失效,在命令行中先exit 然后重新登录可以实现这个目的
重新连接数据库,查看编码,数据表内容
. mysql> show variables like 'character%'; MariaDB [(none)]> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 | //该行未更改,建议使用替换,这样能改的全面
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
. mysql> use test;
. mysql> select * from messages;
. +----+-------------------------------+
. | id | message |
. +----+-------------------------------+
. | | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮 |
. | | ??MySQL?? |
. +----+-------------------------------+
. 这里显示依然是乱码主要是因为之前使用的编码不同造成的,重新运行之前写的程序:java JDBCTest
. ????MySQL????????
. ??MySQL??
. 测试MySQL编码
. 从第三条记录我们可以看到现在程序连接数据库时可以正常的添加和显示中文了 //如果从MySQL command line中仍然查询不到数据,显示数据集为空,继续完成第三步使得系统的编码和mySQL的编码一致就可以查询出来了……& 27. mysql> select * from messages;
. +----+-------------------------------+
. | id | message |
. +----+-------------------------------+
. | | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮 |
. | | ??MySQL?? |
. | | 娴嬭瘯MySQL缂栫爜 |
. +----+-------------------------------+
看回数据库的显示,我们会很奇怪的发现为什么显示的都是乱码,这主要是和windows下命令行的编码有关,在命令行上(命令提示符左上角图标处右键属性)查看属性->选项的当前代码页: (ANSI/OEM - 简体中文 GBK)(本人机子上是这样显示的) 也就是说命令行上使用的是GBK编码,而我们是在程序连接时使用utf8进行添加的,所以会出现有乱码,现在我们将客户端的编码改成gb2312或gbk试一下
. mysql> show variables like 'character%';
. +--------------------------+--------------------------+
. | Variable_name | Value |
. +--------------------------+--------------------------+
. | character_set_client | gb2312 |
. | character_set_connection | gb2312 |
. | character_set_database | utf8 |
. | character_set_filesystem | binary |
. | character_set_results | gb2312 |
. | character_set_server | utf8 | //最后你会发现这个还是没有更改,见下文
. | character_set_system | utf8 |
. | character_sets_dir | D:\MySQL\share\charsets\ |
. +--------------------------+--------------------------+
. mysql> use test;
. mysql> select * from messages;
. +----+-------------------+
. | id | message |
. +----+-------------------+
. | | ????MySQL???????? |
. | | ??MySQL?? |
. | | 测试MySQL编码 |
. +----+-------------------+
补充:更改character_set_server,在安装目录的bin文件夹下使用MySQLInstanceConfig.exe配置,在很多步骤中的一步(选择编码)选择第二项(使用UTF-8)或者第三项(自己设定)……更改完毕……
现在可以看到中文正常显示了(主要是因为utf8也支持中文),所以当我们使用命令行工具连接数据库的时候最好将客户端的编码改一下,如果使用GUI的话就不必了,同时修改客户端的编码之后程序依然能够正常显示(以上两点已经测试)
所以如果在程序中要显示中文的话我们可以选用utf8,gb2312,gbk这三种编码,但是如果想在命令行添加中文数据或者查看的话就需要将客户端的编码设置为gb2312或gbk了,还是那句,CMD的编码有关
原文:http://hi.baidu.com/jsmlay/item/1f824518c8bf6d06e75c3637
注意如下:
遇到一个奇怪的mysql乱码问题,我的mysql全部已经设置成了utf-8,sql-front中文显示也是正常的,通过程序或者是FRONT都能够查找中文,就单单再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 | | character_sets_dir | C:\MySQL\MySQL Server 5.0\share\charsets\ | +--------------------------+-------------------------------------------+ 8 rows in set (0.06 sec) 看似都正常但是在mysql中执行select出来的中文都是乱码,sql-front正常。
mysql命令行下:
安装时是UTF8,my.ini下也改了。可使用show variables like 'character\_set\_%';查看时,发现
character_set_database=labins,character_set_server=labins
查看字符集 show variables like 'character\_set\_%';
修改字符集 set character_set_client=utf8;
MySQL字符集修改命令
1.修改服务器级 a. 临时更改: mysql>SET GLOBAL character_set_server=utf8; b. 永久更改:shell>vi /etc/my.cnf[mysqld]default-character-set=utf8
2.修改数据库级 a. 临时更改: mysql>SET GLOBAL character_set_database=utf8; b. 永久更改:改了服务器级就可以了
3.修改表级 mysql>ALTER TABLE table_name DEFAULT CHARSET utf8; 更改了后永久生效
4.修改列级修改示例: mysql>ALTER TABLE `products` CHANGE `products_model` `products_model` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; 更改了后永久生效 5.更改连接字符集 a. 临时更改:mysql> SET NAMES utf8;b. 永久更改: shell>vi /etc/my.cnf在[client]中增加:default-character-set=utf8
set names gbk
jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8
reference documents
http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_character_set_filesystem
http://blog.sina.com.cn/s/blog_81547cad01014x0v.html
http://hatemysql.com/2011/05/17/mysql-character_sets_dir/
https://mathiasbynens.be/notes/mysql-utf8mb4
mysql 中文支持的更多相关文章
- linux mint 下mysql中文支持问题
一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...
- linux下mysql环境支持中文配置步骤
sql脚本执行前加上: CREATE DATABASE IF NOT EXISTS mydatabase DEFAULT CHARSET utf8 COLLATE UTF8_GENERAL_CI; u ...
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- MySQL中文全文检索
一.概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度. 二.语法 MATCH (col1,col2,...) AGAINS ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
- php mysql 中文乱码解决方法
本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...
- MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]
[文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接:http://blog.zyan.cc/post/356/] MySQL在高并发连接.数据库记录数较多 ...
- Java连接MySQL中文乱码处理【转载】
本文转载地址:http://developer.51cto.com/art/200906/130425.htm 感谢相关作者! MySQL默认编码是latin1 mysql> show vari ...
- QT连接mysql中文显示问题
亲测OK! #vim /etc/mysql/my.cnf [mysqld]下面加入: default-character-set=utf8 重启mysql /etc/init.d/mysql rest ...
随机推荐
- linux网络编程基础--(转自网络)
转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...
- 语法、id和class选择器、创建、
一. 1.CSS规则由两个主要部分构成:选择器,以及一条或多条声明(每条声明由一个属性和一个值构成,属性和值被冒号分开). 2.声明以分号“:”结束,生命组用大括号“{}”括起来. [示例:p {co ...
- element-ui 修改源码实践 --tranfer
1.element-ui 地址:https://github.com/ElemeFE/element 2.修改elelment-ui版本:2.2.2(请选择和项目相对应的版本) 3.修改内容:穿梭框组 ...
- unity解压缩zip发布后的一些问题
前段时间项目需要,搞了下zip的解压缩问题,也是利用ICSharpCode.SharpZipLib.dll来处理的zip,这里说下之前遇到的坑(这里提供我用的这个库ICSharpCode.SharpZ ...
- 高通 MSM8K bootloader之一: SBL1
MSM8K Boot Flow 转自:http://www.cnblogs.com/liang123/p/6325257.html http://blog.csdn.net/F ...
- ReactiveCocoa的学习内容
ReactiveCocoa • 知识备用库:iOS10 collectionView以前是复用的,但是iOS10以后就要设置一个属性才可以复用. • C语言面向过程编程,OC面向对象编程 • 链式编程 ...
- Server Tomcat v7.0 Server at localhost failed to start.解决办法
今天,导入maven项目时,报的错,因为之前没遇到过这个错,一时抓不到头绪,最后请技术大神帮忙解决.他首先看的eclipse的配置,是否与项目对应,在看看.seting 文件中的名称是否与项目名对应, ...
- 将float数据类型转换为str
示例程序: #include <stdio.h> . . void UART_send_byte(char dat); void UART_send_string(unsigned cha ...
- vs问题--------------标记为系统必备组建...
问题:标记为系统必备组建 要将程序集“D:\project\DMS\DMSGaeaService\TmsApplication\bin\Debug\Jns.Gaea.dll”标记为系统必备组件,必须对 ...
- [面经]杭州某初创公司FPGA工程师实习
面试时间:2017年8月17日 面试时长:约1小时 面试形式:面对面 面试公司:杭州某初创公司,致力于开发VR相关产品 面试职位:FPGA工程师(实习) 面试官:公司现任FPGA开发工程师,双控硕士毕 ...