这个系列属于个人学习网易云课堂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
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的字符集
表级
列级
show [global] variables like 'character%';
show [global] variables like 'collation%';
例:
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
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
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";