官网地址:
字符集是指一种从二进制编码到某类字符符号的映射,校对是指一组用于某个字符集的排序规则。并且每一类编码字符都有其对应的字符集合校对规则。
基本信息
MySql支持多种字符集,我们可以通过use the INFORMATION_SCHEMA CHARACTER_SETS table or the SHOW CHARACTER SET statement来查看字符集
SHOW CHARACTER SET;OR SHOW CHARACTER SET LIKE 'latin%';
给定的字符集至少会有一个指定的规则,但是不同的字符集不能有相同的校验规则,我们可以通过use the INFORMATION_SCHEMA COLLATIONS table or the SHOW COLLATION 来查看某个字符集对应的规则
show collation where charset = 'latin1';
字符集和排序规则的级别
服务器、数据库、表和列
服务器字符集设置
可以通过在服务器启动时进行设置或者通过修改my.ini、my.cnf等配置文件进行设置
mysqldmysqld --character-set-server=latin1mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci
若不指定字符集的前提,前两种命令行意义是相同的,默认的字符集是latin1,若不指定校验规则的话,这三种表达的意义是相同的
重新编译更改字符集和校验规则
cmake . -DDEFAULT_CHARSET=latin1
or
cmake . -DDEFAULT_CHARSET=latin1 -DDEFAULT_COLLATION=latin1_german1_ci
修改配置文件更改字符集和校验规则
[mysqld]...skip-character-set-client-handshakecollation-server=utf8_unicode_cicharacter-set-server=utf8
数据库字符集和校验规则设置
CREATE DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]
CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
查看数据库的字符集和校验规则
USE db_name;SELECT @@character_set_database, @@collation_database;ORSELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAMEFROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';
注:
如果指定了字符集和校验规则,则使用指定的校验规则和字符集如果只指定了字符集没有指定校验规则,则使用默认的校验规则如果指定了校验规则没有指定字符集,则使用和校验规则关联的字符集如果字符集和校验规则都没有指定的话则使用服务的字符集和排序规则
表字符集和校验规则设置
CREATE TABLE tbl_name (column_list) [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]]ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]
例子
CREATE TABLE t1 ( ... )CHARACTER SET latin1 COLLATE latin1_danish_ci;
如果指定了字符集和校验规则,则使用指定的校验规则和字符集如果只指定了字符集没有指定校验规则,则使用默认的校验规则如果指定了校验规则没有指定字符集,则使用和校验规则关联的字符集否则则使用数据库字符集和排序规则
列定义字符集和校验规则
col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]col_name {ENUM | SET} (val_list) [CHARACTER SET charset_name] [COLLATE collation_name]
例子
CREATE TABLE t1( col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci);ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
注:
如果指定了字符集和校验规则,则使用指定的校验规则和字符集如果只指定了字符集没有指定校验规则,则使用默认的校验规则如果指定了校验规则没有指定字符集,则使用和校验规则关联的字符集否则则使用表的字符集和排序规则
比较好的文章
字符集,校对,乱码字符集和校对规则
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/788.html