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中文乱码处理     http://developer.51cto.com  2009-06-19 14:54  杨志伟  CSDN  我要评论(0)
      本文将为大家讲解如何处理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 

      character-set-server = 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正常。

声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
自己结贴,字符就算都转成了UTF8但是控制台的字符好像一定要GBK,不知道什么原因我所有字符都是UTF8的但是要想不是乱码一定要在控制台中输入set names gbk;这样就不乱了,说实话很茫然。
 

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 中文支持的更多相关文章

  1. linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...

  2. linux下mysql环境支持中文配置步骤

    sql脚本执行前加上: CREATE DATABASE IF NOT EXISTS mydatabase DEFAULT CHARSET utf8 COLLATE UTF8_GENERAL_CI; u ...

  3. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  4. MySQL中文全文检索

    一.概述      MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度. 二.语法      MATCH (col1,col2,...) AGAINS ...

  5. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)

     linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...

  6. php mysql 中文乱码解决方法

    本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...

  7. MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]

    [文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接:http://blog.zyan.cc/post/356/] MySQL在高并发连接.数据库记录数较多 ...

  8. Java连接MySQL中文乱码处理【转载】

    本文转载地址:http://developer.51cto.com/art/200906/130425.htm 感谢相关作者! MySQL默认编码是latin1 mysql> show vari ...

  9. QT连接mysql中文显示问题

    亲测OK! #vim /etc/mysql/my.cnf [mysqld]下面加入: default-character-set=utf8 重启mysql /etc/init.d/mysql rest ...

随机推荐

  1. 003dayPython学习初始模块和字节码

    一.注释: 1.单行注释 # 被注释的内容 2.多行注释 """ 被注释的内容 """ 二.模块 我们在编程的时候,往往是一个主.py文件, ...

  2. OTP&ETS

    最近觉得实在是该梳理梳理erlang的框架内容了,所以整理了下. OTP(开放电信平台):并发系统平台, 特点:容错(erlang:get_stacktrace(),try-catch,trap_ex ...

  3. spring不走注解的原因

    在配置文件中没有扫描配置注解的类,导致自定义的注解无法被识别,所以不会走,检查配置文件,修改即可

  4. SASS学习笔记!(持续学习中..)

    工具  : koala 学习网址 : http://www.w3cplus.com/sassguide/syntax.html  http://sass-lang.com/documentation/ ...

  5. MySQL行转列、列转行

    一.行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCRE ...

  6. 最近在学习Flask框架,那么就说下jinja2吧~~~

    jinja是组成Flask的模板引擎,先写一个demo吧 {% block body %} <ul> {% for user in users %} <li><a hre ...

  7. 【转载】linux top命令查看内存及多核CPU的使用讲述

    转载 https://www.cnblogs.com/dragonsuc/p/5512797.html 查看多核CPU命令 mpstat -P ALL  和  sar -P ALL 说明:sar -P ...

  8. Navicat连接Mysql报错:Client does not support authentication protocol requested by server;

    Navicat连接Mysql报错:Client does not support authentication protocol requested by server: 刚安装Mysql,想用Nav ...

  9. FUJI 富士 富仕 串口 N500I N700I 连接

    本人丰富的硬件连接经验, 1.出售富士生化设备N500I, N700I 接入,C#代码demo,  可连接机器验证,验证后付款2. 提供宠物行业富士生化设备N500I, N700I型号接入软件技术支持 ...

  10. JS调用本地设备

    JS 允许通过 navigator.mediaDevices.getUserMedia(options) 直接调用本地的设备,比如麦克风,摄像头等.因为该操作涉及到用户隐私,所以调用的时候会弹框请求权 ...