在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是????

1、在配置Connection URL时,加上?useUnicode=true&characterEncoding=utf-8

2、编辑/etc/my.cnf

在[mysqld]下添加

default-character-set=utf8

在[client]下添加

default-character-set=utf8

 

可是这样做的原理是什么?为什么这样做就能解决问题那?

逐步分析一下:

1、useUnicode=true这个用加吗?答案是不用,翻看connector-j-en.a4.pdf

它的默认值就是true

2、 mysqld 下的default_character_set=utf8;,这个需要吗?答案是不需要。查看refman-5.1

它的作用是

当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。可以使用--default-character-set设置字符集;

如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。默认数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量。无论何时默认数据库更改了,服务器都设置这两个变量的值。如果没有 默认数据库,这两个变量与相应的服务器级别的变量(character_set_server和collation_server)具有相同的值。

大白话就是:如果你建表的时候没有指定字符编码,则会使用character_set_database,如果character_set_database也没有设值,则使用character_set_server

3、 client 下的default_character_set=utf8; 它是需要的,可是它的作用是干吗的?

它的作用等同执行以下3个命令

SET character_set_client = utf8

SET character_set_results = utf8;

SET character_set_connection = utf8;

这3个参数的作用如下

系统变量character_set_client:用来指定解析客户端传递数据的编码

系统变量character_set_connection:用来指定数据库内部处理时使用的编码

系统变量character_set_results:用来指定数据返回给客户端的编码方式

现在讲述一下?useUnicode=true&characterEncoding=utf-8中的characterEncoding

它的作用就是指定character_set_client和character_set_connection的值,而在jdbc链接中使用characterSetResults=UTF-8,即可设置character_set_results的值

但是如上所述,当你配置了client的default_character_set之后,characterEncodingcharacterSetResults这两个变量你设置与否都不重要了。

 

结论如下:

如果你只愿意配置服务器的话:

在[client]下添加

default-character-set=utf8即可

如果你只愿意配置客户端的话:

你可以使用jdbc:mysql://localhost:3306/test? characterEncoding=UTF-8&characterSetResults=UTF-8即可

使用jdbc

character_set_client - utf8

character_set_connection - utf8

character_set_database - utf8

character_set_filesystem - binary

character_set_results -

character_set_server - utf8

character_set_system - utf8

character_sets_dir - /usr/share/mysql/charsets/

使用mysql客户端

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 /usr/share/mysql/charsets/

mysql编码详解的更多相关文章

  1. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  2. mysql 存储过程详解 存储过程

    mysql存储过程详解 1.      存储过程简介         我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成 ...

  3. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

  4. MySQL存储过程详解 mysql 存储过程(二)

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  5. MySQL字符集详解

    Reference:  https://www.cnblogs.com/wcwen1990/p/6917109.html MySQL字符集详解   一.字符集和校验规则 字符集是一套符合和编码,校验规 ...

  6. Python2.7字符编码详解

    目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...

  7. MySQL存储过程详解 mysql 存储过程(转)

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. mysql存储过程详解实例

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  9. mysql存储过程详解及基于PHP使用实例

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

随机推荐

  1. 函数mem_pool_create

    /********************************************************************//** Creates a memory pool. @re ...

  2. codeforces 431 B Shower Line【暴力】

    题意:给出五个人的编号,分别为 1 2 3 4 5,他们在排队, 最开始的时候,1和2可以交谈,3和4可以交谈 然后1走了之后,2和3交谈,4和5可以交谈 2走了之后,3和4可以交谈, 3走了之后,4 ...

  3. openerp学习笔记 context 的应用

    1.在Action中定义,context用于传递搜索条件和分组条件,在搜索视图中默认显示: 示例代码: <record model="ir.actions.act_window&quo ...

  4. setTimeOut() 和 setTimeInterval()

    setTimeOut()は.指定された時間「待ってから」指定された動作を行う関数です.setTimeOut():等待指定时间,执行指定方法. setTimeInterval()は.指定された時間「間隔 ...

  5. 02.C语言关于指针的学习笔记

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...

  6. xcode安装app

    安装 xcode 安装 xcode command line tool 检查是否安装 在终端中运行: xcrun simctl list 如果出现所有的 Device Types,则可以进行第3步 如 ...

  7. erl0009 - erlang 读取时间瓶颈解决办法

    读取时间erlang提供有两种方式: 1.erlang:now(); 2.os:timestamp(); 以上两种方式由于erlang系统需要保证读取精度,当并发读取的时候会引起加锁.系统频繁读取时间 ...

  8. webservices上传文件

    客户端: ob_clean(); ob_start(); readfile("D:/44.jpg"); $logo = ob_get_clean(); $pararmArr = a ...

  9. makefile实例(2)-多个文件实例

    1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...

  10. 使用RoboCopy 命令

    经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...