刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置。

字符集

查看数据库支持的字符集:

mysql> SHOW CHARACTER SET;



从图中可以看到数据库中可用的字符集以及每个字符集的描述和默认的校对。

校对:在一个字符集中对字符的比对规则。

查看所支持的校对的完整列表。

mysql> SHOW COLLATIONS;

从中可以看到,有的字符集不止一种校对,例如latin1对不同的欧洲语言有几种校对,而且许多校对出现两次,一次区分大小写(由_cs表示case sensitive),一次不区分大小写(由_ci表示case insensitive)。

通常系统管理在安装时定义一个默认的字符集和校对。此外,也可以在创建数据库时,指定默认的字符集和校对。为了确定所使用的字符集和校对,可以使用一下语句:

mysql> SHOW VARIABLES LIKE 'character%';
mysql> SHOW VARIABLES LIKE 'collation%';

实际上,字符集很少是服务器范围(甚至是数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。

为了给表指定字符集和校对,可使用带子句的CREATE TABLE:

CREATE TABLE user(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
username VARCHAR(10)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

除了能指定字符集和校对的表范围内,MySQL还允许对没个列设置它们,如下所示:

CREATE TABLE user (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
username VARCHA(10),
about VARCHAR(100) CHARACTER SET latin2 COLLATE latin2_general_ci
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

校对对用ORDER BY检索出来的数据排序时起非常重要的作用。如果需要用与创建表时不同的顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:

SELECT * FROM customers ORDER BY lastname COLLATE latin1_general_cs;

编码设置

MySQL连接存在四种编码设置:

  1. 数据库服务端编码
  2. 数据库编码
  3. 客户端编码
  4. 连接编码

以上四个编码有一个不符合都有可能出现与预期不符合的结果。

查看编码情况:

mysql> status;

从上图中可以看到四个编码中数据库服务端编码和数据库编码都是latin1的编码,只有客户端和连接是使用的utf8,这也是默认的情况,MySQL安装之后若不做设置默认就是latin1编码,若有中文时定会造成很多困扰。下面就分步讲讲如何设置这几部分的编码。

  1. 设置数据库服务端编码:

    主要涉及到配置文件的修改,即/etc/mysql/my.conf,也可以通过SET命令的方式修改。

    /etc/mysql/my.conf中找到[mysqld](若没有则手动添加,同理,若/etc/mysql/my.conf不存在,手动添加即可)加入以下配置信息:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

此处设置好保存之后记得重启MySQL,若是Debian系的,如Ubuntu:

icebug@localhost:~$ sudo /etc/init.d/mysql restart

若是RedHat系的如CentOS:

icebug@localhost:~$ sudo /etc/init.d/mysqld restart

icebug@localhost:~$ sudo systemctl restart mysqld

重新登陆MySQL使用status查看,若都为utf8即说明设置成功。

当然,这还只是设置了默认编码,即对于新建的库编码是没有问题的,对于已经建立的库怎么办?这就需要单独设置数据库的编码了。

ALTER DATABASE <database name> CHARACTER SET <character set>;

EX:

mysql> ALTER DATABASE world CHARACTER SET utf8;
mysql> ALTER DATABASE world COLLATE utf8_general_ci;

从设置MySQL字符集这个过程中又加深了对一个道理的理解,不管学习哪个新东西,官方文档都应该作为首要资料翻阅,这才是真正可靠的捷径。: )

官方文档传送门:http://dev.mysql.com/doc/refman/5.7/en/charset.html

MySQL基础 - 编码设置的更多相关文章

  1. mysql utf8编码设置

    1.建立数据库时指定数据库db_test为utf8编码.: create database db_test character set utf8;  修改数据库db_test编码的命令为: alter ...

  2. MySQL修改编码设置及乱码问题

    源地址:http://blog.csdn.net/millia/article/details/5806774   昨天尝试把自己用php编写的第一个糙站发布到网上..结果出现了因为编码不统一而导致乱 ...

  3. mysql字符编码设置

    1.显示当前编码信息 mysql>show variables like '%character%' +--------------------------+------------------ ...

  4. mysql数据库编码设置成utf-8,避免出现乱码

    设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 C ...

  5. mysql 字符编码设置

    安装mysql时如果字符编码为默认值latin1,则需要修改为utf8以便支持中文数据. 命令如下: 1.显示数据库字符集 mysql> show create database test;+- ...

  6. java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' 异常处理,及MySQL数据库编码设置

    java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,C ...

  7. 以Windows服务方式启动MySQL,并将其默认编码设置为UTF-8

    系统环境:Windows XP Professional 版本 2002 Service Pack 3 // 第1步:创建选项文件.首先下载mysql-5.5.12-win32.zip,只需复制mys ...

  8. MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) - 转载

    MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...

  9. MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码)

    MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...

随机推荐

  1. 【读书笔记】iOS-NSString的length

    NSString的length方法能够准确无误地处理国际字符串,如含有俄文,中文或者日本文字符的字符串,以及使用Unicode国际字符标准的字符串.在C语言中处理这些国际字符串是件令人非常头疼的事情 ...

  2. git 查看远程分支、本地分支、删除本地分支

    1 查看远程分支 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ git branch -a   * br-2.1.2.2   master   remotes/origi ...

  3. 二维码扫描利用ZBar实现

    上次是根据系统的属性自己封装的一个二维码扫描,这次给大家介绍一下基于ZBar集成的类似于QQ二维码扫描界面的二维码扫描的效果.                                     ...

  4. 【转】初识CGI

    一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口.通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器 ...

  5. selinux开启关闭

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  6. IOS沙盒Files目录说明和常用操作

    Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...

  7. Outlook 2013 在邮件里面点击超链接时弹出“组织策略阻止我们为您完成此操作”

    现象描叙:     在Outlook在邮件里面点击超链接时,打不开超链接页面,弹出如下提示: 这个是因为之前安装了其它浏览器(例如,我安装了360的浏览器),并且设置为了默认浏览器,后来卸载了该浏览器 ...

  8. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  9. python ljust,rjust,center,zfill对齐使用方法

    字符串在输出时的对齐:S.ljust(width,[fillchar]) #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格. S.rjust(width,[fillcha ...

  10. [转]设定version 更新js缓存

    http://zhenggm.iteye.com/blog/680600 遇到的问题:         在访问量比较大的系统中,我们需要将一些静态的文件在客户端缓存,以减少下载的流量,从而加快客户端访 ...