[MySQL] 字符集的选择
1、 Mysql支持的字符集
MySQL服务器可以支持多种字符集,不同的字段都可以使用不同的字符集。
查看所有可用字符集:
show character set;
select * from information_schema.character_sets;
MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。其中字符集定义MySQL存储字符串的方式,校对规则用来定义比较字符串的方式。字符集和校对规则是一对多的关系。
注:目前线上服务器上用utf8mb4 和utf8mb4_bin。
校对规则可用 show collation like ‘xxx’ 查看。
校对规则命名约定:已其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写敏感)、_cs(大小写不敏感)或者_bin(二院,即比较是基于字符编码的值而与language无关,区分大小写)结束。
2、 MySQL字符集的设置
MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。
1)服务器字符集和校对规则
- 在my.cnf中设置
[mysqld]
character-set-server=utf8mb4
- 在启动选项中指定:
mysqld --character-set-server=utf8mb4
- 或者在编译时指定:
shell> cmake . –DDEFAULT_CHARSET=utf8mb4
查看当前服务器的字符集和校对规则:
show variables like ‘character_set_server’;
show variables like ‘collation_server’;
如果没有设置则默认是latin 1字符集。(MySQl5.6版本)
2)数据库字符集和校对规则
在数据库创建的时候指定,也可以在创建完数据库后通过alter database 命令进行修改。
查看当前数据库字符集和校对规则:
show variables like ‘character_set_database’;
show variable like ‘collation_database’;
3)表字符集和校对规则
在建表的时候可以指定字符集和校对规则,也可以通过alter table 命令进行修改(一般不用)。如果没有指定,则使用数据库的规则。
查看表的字符集和校对规则:show create table table_name;
4)列字符集和校对规则
同上
5)连接字符集和校对规则
以上4中设置方式,确定的事数据保存字符集和校对规则,对于实际应用访问来说,还存在客户端和服务器之间交互的字符集和校对规则的设置。
客户端和服务器的交互操作,MySQL提供了三个不同的character_set_client、character_set_connection和character_set_result,分别表客户端、连接和返回结果的字符集。通常情况下需要确保三者一样。可以用set names utf8mb4;命令来同时设置三个参数。
另一个简便方法:在my.cnf里设置客户端
[mysql]
default-character-set=utf8mb4
3、 字符集修改
如果在应用开始阶段没有正确的选择字符集,在运行一段时间后才发现存在不能满足要求需要调整,又不想丢弃这段时间的数据,那么就要进行字符集的修改。字符集的修改不能直接通过 “alter database character set ‘xxx” 或者”alter table table_name character set xxx”命令进行调整,这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。
字符集修改,需要先导出数据,经过适当的调整重新导入后才可完成。
下面模拟将latin1字符集的数据库修改成utf8mb4字符集的数据库。
1)导出表结构:
mysqldump –uroot –p –default-character-set=utf8mb4 –d database_name > createtab.sql;
-d 表示指导处表结构,不导出数据。
2)手工修改createtab.sql中表结构定义中的字符集为新字符集。
3)确保记录不在更新,导出所有记录(锁表导出)
mysqldump –uroot –p –quick –no-create-info –extended-insert –default-character-set=latin1 database_name > data.sql
--quick 用于转储大的表。他强制mysqldump从服务器一次一行地检索表中的行而不是一次检索所有行,并在输出前将他缓存在内存中。
--extended-insert 使用包括几个values列表的多行insert 语法。这样使转储文件更小,重载文件时可以加速插入。
--no-create-info 不导出建表语句
--default-character-set=latin1 按照原有的字符集导出所有数据
4)打开data.sql,将set names latin1修改成set names utf8mb4
5)使用新的字符集创建新的数据库
create database databasename default charset utf8mb4;
6)创建表,执行createtab.sql
mysql –uroot –p database_name < createtab.sql
7)导入数据
mysql –uroot –p database_name < data.sql
[MySQL] 字符集的选择的更多相关文章
- 2020重新出发,MySql基础,MySql字符集
目录 MySQL字符集和校对规则详解 MySQL字符集的转换过程 MySQL查看字符集和校对规则 MySQL设置默认字符集和校对规则 服务器字符集和校对规则 数据库字符集和校对规则 表字符集和校对规则 ...
- Mysql字符集设置
转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...
- MySQL字符集
字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...
- MySQL字符集转换引发插入乱码问题
根据http://www.cnblogs.com/cchust/p/4601536.html进行验证测试 问题背景 在mysql上面执行一条普通的insert语句,结果报错: Incorrect st ...
- Mysql字符集设置 2 图
基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodin ...
- 查看mysql字符集及修改表结构--表字符集,字段字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- linux(Ubuntu)下mysql字符集完美解决
本文参考: 1. http://www.blogjava.net/wldandan/archive/2007/09/04/142669.html 2. http://chinaapp.sinaapp. ...
- 略懂 MySQL字符集
本文虽说旨在明白.但若略懂亦可.毕竟诸葛孔明如是 只有基于字符的值才有所谓字符集的概念 某些字符集可能需要更多CPU.消费更多的内存和磁盘空间.甚至影响索引使用 这还不包括令人 ...
- mysql 字符集配置
查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...
随机推荐
- C中的基本数据类型和变量
C语言中的数据类型 基本数据类型 1) 整型 (int %d) 2) 字符型 (char %c) 3) 浮点型 %d ①. 单精度浮点型(float) ②. 双精度浮点型(double) 2.指 ...
- 【NOIP2013】【P1441】花匠
又一次看错题…… 原题: 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比 ...
- springMvc源码学习之:spirngMvc的参数注入的问题
转载:https://my.oschina.net/lichhao/blog/172562 概述 在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成 ...
- 主机连接虚拟机 web服务
主机上安装了个VM centeros 首先通过 终端:ifconfig eth0 查看虚拟机的Ip地址 这样就能在主机上通过浏览器http://192.168.150.128/a.php 访问虚拟机的 ...
- Java static block static constructor , static field
http://stackoverflow.com/questions/7121213/singleton-instantiation http://docs.oracle.com/javase/spe ...
- PHP-网页跳转的几种方式
本文总结了跳转到指定网页的几种方式. 1.利用PHP的header函数Location响应头, header是用来向浏览器返回HTTP响应头(详细请看HTTP协议详解) <?php header ...
- mysql学习之-show table status(获取表的信息)参数说明
--获取表的信息mysql> show table status like 'columns_priv'\G;*************************** 1. row ******* ...
- solr 主从模式和solrcloud集群模式
主从模式 主节点有单点故障问题:没有主从自动切换,没有failover,主机down掉了的话,整个数据变成只读.并且需要一台机单独做索引,浪费资源,所有数据都需要在这台机器上单独存在一份,索引变化较大 ...
- 免费web api接口大全
下面的接口来自互联网,部分功能需要付费 查询手机 http://www.yodao.com/smartresult-xml/search.s?type=mobile&q=手机号码 查询IP h ...
- Unity3D研究院编辑器之脚本获取资源内存和硬盘大小
内存 使用Profiler可以查看某个资源的内存占用情况,但是必须启动游戏,并且待查看的资源已经载入游戏中.我希望的是不启动游戏,也能看到它的内存好做统计. 硬盘 由于unity中的资源压缩格式记录在 ...