MySQL基础 - 编码设置
刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置。
字符集
查看数据库支持的字符集:
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连接存在四种编码设置:
- 数据库服务端编码
- 数据库编码
- 客户端编码
- 连接编码
以上四个编码有一个不符合都有可能出现与预期不符合的结果。
查看编码情况:
mysql> status;

从上图中可以看到四个编码中数据库服务端编码和数据库编码都是latin1的编码,只有客户端和连接是使用的utf8,这也是默认的情况,MySQL安装之后若不做设置默认就是latin1编码,若有中文时定会造成很多困扰。下面就分步讲讲如何设置这几部分的编码。
- 设置数据库服务端编码:
主要涉及到配置文件的修改,即/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基础 - 编码设置的更多相关文章
- mysql utf8编码设置
1.建立数据库时指定数据库db_test为utf8编码.: create database db_test character set utf8; 修改数据库db_test编码的命令为: alter ...
- MySQL修改编码设置及乱码问题
源地址:http://blog.csdn.net/millia/article/details/5806774 昨天尝试把自己用php编写的第一个糙站发布到网上..结果出现了因为编码不统一而导致乱 ...
- mysql字符编码设置
1.显示当前编码信息 mysql>show variables like '%character%' +--------------------------+------------------ ...
- mysql数据库编码设置成utf-8,避免出现乱码
设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 C ...
- mysql 字符编码设置
安装mysql时如果字符编码为默认值latin1,则需要修改为utf8以便支持中文数据. 命令如下: 1.显示数据库字符集 mysql> show create database test;+- ...
- 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 ...
- 以Windows服务方式启动MySQL,并将其默认编码设置为UTF-8
系统环境:Windows XP Professional 版本 2002 Service Pack 3 // 第1步:创建选项文件.首先下载mysql-5.5.12-win32.zip,只需复制mys ...
- MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) - 转载
MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...
- MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码)
MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...
随机推荐
- 物联网网络编程、Web编程综述
本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真 ...
- Retrofit源码设计模式解析(上)
Retrofit通过注解的方法标记HTTP请求参数,支持常用HTTP方法,统一返回值解析,支持异步/同步的请求方式,将HTTP请求对象化,参数化.真正执行网络访问的是Okhttp,Okhttp支持HT ...
- Swift中的数组
学习来自<极客学院:Swift中的字符串和集合> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 import Foundation //数组: ...
- SAP SD业务的简图
- rowcount和@@Rowcount的区别,获取insert、update、delete影响行数
rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10select * from 表A 这样的查询只会 ...
- php进程的SIGBUS故障
某个子站是php写的,访问的时候nginx时不时会冒出现502错误,高峰时更频繁,检查php-fpm的日志发现大量的 child exited on signal 7 (SIGBUS),并且和acce ...
- PHP笔记(PHP高级篇)
高级篇中将涉及数据库的使用以及Cookie和Session会话,提高PHP的开发效率和运行效率 PHP程序员需要掌握的MySQL操作 为项目设计表 使用SQL语句 MySQL的目录结构 data目录中 ...
- JavaScript日期组件的实现
旅游频道的开发中需要定义各种日期组件,有的是基本的日期选择, 这个基本日期只包含如下功能 左右翻(月) 点击天回填到输入域 点击“今天”,回填今天的日期到输入域 点击“关闭”,日期控件关闭 有的同时显 ...
- CentOS6.5上golang环境配置
CentOS6.5上golang环境配置 一.下载和解压go环境包 >>cd /usr/local/src/ >>wget -c http://golangtc.com/sta ...
- java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...