Mysql系列-字符集
字符集
怎样选择合适的字符集
- 如果应用程序需要发布到很多国家和地区,需要支持各种各样的文字,则选择Unicode编码,Mysql中即UTF-8.q如果需要将数据导入数据库,这时候要注意数据库字符集对数据字符集的兼容性,最好一致。
- 如果数据库支持一般中文,数据量很大,性能要求高,那么应该选择双字节定长编码的中文字符集,比如GBK。因为相对于UTF-8而言GBK每个汉字只需要2个字节,而UTF8每个汉字需要3个字节。
- 如果数据库需要做大量的检索、比较、排序,应该选择定长字符集。
查看字符集
字符集和校对规则是一对多的关系
show character set; //查看数据库可用的所有字符集
show collation like '%gbk%'; //查看字符集的校对规则
校对规则命名约定:
_ci:大小写不敏感,_cs:大小写敏感,_bin:二进制值比较
MySQL字符集设置
MySQL的字符集和校对规则分四个级别的默认设置:
服务器级、数据库级、表级、字段级 服务器级:
在MySQL服务启动时来确定
1.在my.cnf中设置:[mysqld] character-set-server=gbk
2.在启动选项中指定:mysqld --character-set-server=gbk
3.在编译时指定:shell> cmake . -DDEFAULT_CHARSET=gbk
在没有指定校对规则的情况下,使用默认的校对规则。
//查询当前服务器的字符集
show variables like 'character_set_server';
//查询当前服务器的校对集
show variables like 'collation_server'; 数据库级:
在创建数据库的时候指定,也可以在创建完成之后通过alter database命令修改。推荐在创建数据库的时候显式指定字符集和校对规则,如果没有指定,则默认使用服务器字符集和校对规则。
show variables like 'character_set_database';
show variables like 'collation_database'; 表级:
在创建表的时候指定,如果没有指定则使用数据库的字符集和校对规则。
show create table t1; 列级:
列级别的字符集一般不适用,主要是针对不同字段需要使用不同字符集的情况,遇到的几率很小。 以上四种字符集设置确定的是数据保存的字符集和校对规则,对于实际的应用程序,还存在客户端和服务器之间交互的字符集和校对规则设置。
MySQL提供了三个参数:character_set_client、character_set_connection、character_set_results.分别代表客户端、连接、返回结果的字符集。通长情况下这三种字符集是相同的。
一般通过下面的命令设置这三个参数。
set names utf8; //应用程序每次连接数据库都需要执行。
字符集修改步骤
如果数据库中已经存在数据,此时想修改字符集不能通过 alter table 或者alter database这 两个命令都无法作用于已存在的数据。
一下模拟lantin1字符集数据库修改成GBK字符集数据库的过程 1.导出表结构:
mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql
--default-character-set=gbk:设置以什么方式连接
-d:表示只导出表结构,不导出数据
2.手工修改createtab.sql中表结构定义中的字符集为新的字符集。
3.确保记录不在更新导出所有记录。
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character- set=latin1 databasename> data.sql
--quick:该选项用于转储大的表
--extended-insert:使用包括几个values列表的多行insert语法,加速插入。
--no-create-info:不导出每个转储表的create table语句。
--default-character-set=latain1:按照原有的字符集导出数据。
4.打开data.sql,将set names latin1 手工修改为:set names gbk;
5.使用新的字符集创建新的数据库
create database databasename default charset gbk;
6.创建表,执行createtab.sql
mysql -uroot -p databasename < createtab.sql
7.导入数据,执行data.sql
mysql -uroot -p databasename < data.sql
Mysql系列-字符集的更多相关文章
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL 系列(一)安装
MySQL 系列(一)安装 以 Centos7 下安装 MySQL 5.6 为例. 一.环境准备 (1) 下载 下载地址: https://dev.mysql.com/get/Downloads/My ...
- MySQL系列(一)--基础知识(转载)
安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...
- 为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》
群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文 ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决
一.简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发.发布并支持的.有以下特点: MySQL是一种数据库管理系统. MySQL是一种关联数据库管理系统. MySQ ...
- 修改MySQL默认字符集编码
好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MyS ...
- MySQL设置字符集为UTF8(Windows版)
Windows版MySQL设置字符集全部为utf8的方式 MySQL安装目录下的my.ini文件 [client]节点 default-character-set=utf8 (增加) [mysq ...
随机推荐
- java學習書
轉載 成为Java顶尖程序员 ,看这11本书就够了 以下是我推荐给Java开发者们的一些值得一看的好书.但是这些书里面并没有Java基础.Java教程之类的书,不是我不推荐,而是离我自己学习 Java ...
- Service Fabric 用 Powershell 部署应用到本地
前置说明 安装 Service Fabric SDK,会在本机 C:\Program Files\Microsoft SDKs\Service Fabric\Tools\PSModule\Servic ...
- webservice不能序列化接口问题,返回值为IList或者参数为接口的解决办法。
1. webservice 不能返回泛型接口集合IList,解决办法如下链接: 参考资料:http://www.cnblogs.com/yinhaiming/articles/1379424.html ...
- Struts2学习第3天--OGNL、EL、值栈
JAVA中的OGNL: 1 调用对象的方法: 2 访问对象的静态方法: 3 获取OGNLContext.Root中的数据. User: 4 访问Context: 关键还是在Struts2环境中的使用: ...
- 再谈VS2010编译更高平台vs2012(v110),vs2015(v140)的objectARX程序
前段时间我贴了一篇vs2010批量编译vc6~vs2008的ARX版本,实际上那一篇是我在研究vs2010编译v110,v140平台的附带收获,正应了那句话,有心栽花花不开,无心插柳柳成荫,因为vs2 ...
- pycharm 2016 注册(pycharm-professional-2016.3.2)
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- n阶行列式算法(c程序)
#include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() { int n,a[N][ ...
- [WebShow系列] 固定展示界面的现场调用
正在制作......,敬请期待. 固定展示界面的现场调用 现场管理员通过现场控制台可以控制主展示界面,实现 主题 所选选手展示 所选选手打分展示 排行展示 详情排行展示 柱状图展示 界面的展示切换外, ...
- 斐讯 N1 刷 Armbian 5.75
前言 不知不觉居然鸽了快半年的博客_(:3」∠)_ 好吧最近发现之前玩的 N1 Armbian 系统已经出到 5.75 了,之前刷 5.64 玩过,具体博文在此,说实话并不是很稳定,有线网络有时会卡死 ...
- 老男孩python作业5-开发一个简单的python计算器
开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...