前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网易MySQL微专业学习笔记(八)-MySQL字符集

网易MySQL微专业学习笔记(八)-MySQL字符集

作者头像
WindCoder
发布2018-09-19 18:22:57
4990
发布2018-09-19 18:22:57
举报
文章被收录于专栏:WindCoderWindCoder

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

所有笔记可能不定期更新,发布时不一定为最终版。

正文

字符集基础

字符集:数据库中的字符集包含两层含义

1)各种文字和字符的集合,包含各国家文字、标点符号、图形符号、数字等。

2)字符的编码方法,即二进制数据与字符的映射规则。

字符集-分类

ASCII:美国信息互换标准编码;英语和其他西欧语言;单字节编码,7位(bits)表示一个字符,共128字符。

GBK:汉子内码扩展规范;中日韩汉字、英文、数字;双字节编码;共收录了21003个汉字,GB2312的扩展。

UTF-8:Unicode标准的可变商都字符编码;Unicode标准(统一码),业界统一标准,包含时间上数十种文字的系统;utf-8使用一至四个字节为每个字符编码。

其他常见字符集:

UTF-32,UTF-16,也是符合Unicode标准的字符集,只是编码规则和UTF-8稍微不同

Big5:中国台湾使用的字符集,主要是用来表示一些繁体字

latin1:mysql默认的字符集,主要用来表示一些西欧语,不支持汉字。

查看字符集

SHOW CHARACTER SET;

新增字符集

可以在当遇到mysql不支持的字符集时使用。

编译时时加入: --with-charset=

例:./configure --prefix=/usr/local/mysql3 --with-piugins=innobase --with-charset=gbk

字符集与字符序

charset和collation

collation:字符序,字符的排序与比较规则,每个字符集都有对应的多套字符序。

不同的字符序决定了字符串在比较排序中的精度和性能不同。

show collation 查看字符序

utf8_general_ci

可排序普通英文字符,但若是德语的英语不支持

utf8_bin

utf8_unicode_ci

支持德语的英语,精度提高,性能降低。

mysql的字符序遵从命名惯例:以_ci(表示大小写不敏感),以_cs(表示大小写敏感),以_bin(表示用编码值进行比较)。

字符集设置级别

charset和collation的设置级别:

服务器级>>数据库级>>表级>>列级

服务器级

系统变量(可动态设置)

-character_set_server:默认的内部操作字符集。

-character_set_system:系统元数据(字段名等)字符集

字符集设置级别

服务器级

配置文件设置

[mysqld]

character_set_server = utf8

collation_server=utf8_general_ci

数据库级

CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

-character_set_database:当前选中数据库的默认字符集

主要影响load data等语句的默认字符集,CRATE DATABASE的字符集如果不设置,默认使用character_set_server的字符集

表级

列级

数据存储字符集使用规则

  • 使用列级的CHARACTER设定值;
  • 若列级字符集不存在,则是用对应表级的DEFAULT CHATACTER SET 设定值;
  • 若表级字符集不存在,则使用数据库级的DEFAULT CHATACTER SET 设定值;
  • 若数据库及字符集不存在,则使用服务器级character_set_server设定值。

查看字符集

代码语言:javascript
复制
show [global] variables like 'character%';

show [global] variables like 'collation%';

例:

代码语言:javascript
复制
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

修改字符集

代码语言:javascript
复制
set global character_set_server=utf8; -- 全局

alter table xxx convert to character set xxx; -- 表

客户端连接与字符集

连接与字符集

character_set_client:客户端来源数据使用的字符集

character_set_connection:连接层字符集

character_set_results:查询结果字符集

set names utf8: 统一设置以上字符集;

配置文件设置:

[mysql]

default-character-set=utf8

常见乱码原因

  • 1、数据库存储字符集不能正确编码(不支持)client发来的数据:client(utf8)->storage(latin1)
  • 2、程序连接使用的字符集与通知mysql的character_set_client等不一致或不兼容。

使用建议

  • 1、创建数据库/表时显示的指定字符集,不使用默认。
  • 2、连接字符集与数据存储字符集设置一致,推荐使用utf8.
  • 3、驱动程序连接时显示指定字符集(set names xxx)

mysql C API 初始化数据库语柄后马上用mysql_options设置MYSQL_SET_CHARATER_NAME属性我utf8

mysql PHP:连接到数据库以后显示用SET NAMES 语句设置一次连接字符集

mysql JDBC:

url="jdbc:mysql://localhost:3306/blog_dbo?user=xx&password=x&useUnicode=true&characterEncoding=utf8";

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 字符集基础
      • 字符集:数据库中的字符集包含两层含义
      • 字符集-分类
    • 查看字符集
      • 新增字符集
        • 字符集与字符序
          • charset和collation
        • 字符集设置级别
          • 服务器级
        • 数据存储字符集使用规则
          • 查看字符集
            • 修改字符集
              • 客户端连接与字符集
                • 连接与字符集
                • 配置文件设置:
              • 常见乱码原因
                • 使用建议
                相关产品与服务
                云数据库 MySQL
                腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档