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 ...
随机推荐
- Saku实力挖坑记!!(十八)
Saiku实力挖坑记!!!!!!! 我可真真真的是个挖坑小能手呀!不知道你们有没有遇到过这个异常: Enclosure class mondrian.olap.MondrianDef not foun ...
- django中的Q查询
转载于:https://mozillazg.com/2015/11/django-the-power-of-q-objects-and-how-to-use-q-object.html 原文写的很详细 ...
- shell脚本中给字符串添加颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: ec ...
- No space left on device Linux系统磁盘空间已满
1. 删除系统日志等 删除生成 core,mbox等文件 #find / -name core|xargs rm –rf 删除日志 2.重起机器
- ubuntu google chrome 全屏显示命令
全屏模式:kiosk默认全屏打开一个网页呢,只需要在快捷方式中加上 --kiosk [url] 就可以了.终端命令行打开: google-chrome --kiosk www.baidu.com 参考 ...
- Vue组件化应用构建 官网例子 Unknown custom element: <todo-item>
[博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...
- WordCount程序与测试
Github地址: https://github.com/hcy6668/wordCount PSP表格: PSP PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 60 40 ...
- spring-data-mongodb 使用原生aggregate语句
除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...
- nc/netcat命令
nc/netcat命令 语法 nc/netcat(选项)(参数) 选项 -g<网关>:设置路由器跃程通信网关,最多设置8个: -G<指向器数目>:设置来源路由指向器,其数值为4 ...
- 18-09-13 机器人和服务器之间的ip配置和脚本的重启
问题9 服务器安装完毕后 怎么配置机器人客户端的配置ip