赞
踩
A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.
操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL。
Suffix | Meaning |
_ai | Accent-insensitive |
_as | Accent-sensitive |
_ci | Case-insensitive |
_cs | Case-sensitive |
_ks | Kana-sensitive |
_bin | Binary |
有很多种方法可以查看当前MySQL Server支持的Character Set:
- show character set; -- 方法1
-
- show charset; -- 方法2
-
- show char set; -- 方法3
-
- select * from information_schema.character_sets; -- 方法 4
查看特定字符集信息(主要包含默认的Collation和MAXLEN):
- show character set like 'utf%';; -- 方法1
-
- show charset like 'utf%';; -- 方法2
-
- show char set like 'utf%'; -- 方法3
-
- select * from information_schema.character_sets
- where CHARACTER_SET_NAME like 'utf%'; -- 方法 4
SHOW COLLATION WHERE Charset = 'utf8mb4';
或者
select * from INFORMATION_SCHEMA.COLLATIONS where CHARACTER_SET_NAME='utf8mb4';
show variables like 'character_set_server';
show variables like 'collation_server';
或者使用语句:
select @@character_set_server, @@collation_server;
MySQL官方文档可查看默认的Charset和Collation:
修改默认值,需要重新编译源码。
cmake . -DDEFAULT_CHARSET=latin1
或者
- cmake . -DDEFAULT_CHARSET=latin1 \
- -DDEFAULT_COLLATION=latin1_german1_ci
可以在启动MySQL Server的时候指定Server的Charset和Collation,下面三种方法是等效的:
mysqld # 默认的charset是utf8mb4, 而且 utf8mb4 默认的collation是 utf8mb4_0900_ai_ci
或
mysqld --character-set-server=utf8mb4
或
- mysqld --character-set-server=utf8mb4 \
- --collation-server=utf8mb4_0900_ai_ci
创建数据库的时候,如果没有指定character set 和 collation,会自动用MySQL Server的 character set和collation。
- USE db_name;
- SELECT @@character_set_database, @@collation_database;
不想改变当前数据库的话,可以使用语句:
- SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
- FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';
创建db时指定:
CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
修改:
ALTER DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
如果创建表的时候没有指定表级别Charset和Collation,会默认使用数据库(Database)的Charset和Collation。
- SELECT
- t.TABLE_SCHEMA,
- t.table_name,
- ccsa.*
- FROM
- information_schema.`TABLES` t,
- information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` ccsa
- WHERE ccsa.collation_name = t.table_collation
- AND t.table_schema = "db_name"
- AND t.table_name = "table_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]
如果创建表的时候没有指定列的Charset和Collation,会默认使用表(Table)的Charset和Collation。
- SELECT
- *
- FROM information_schema.`COLUMNS`
- WHERE table_schema = "db_name"
- AND table_name = "table_name";
- CREATE TABLE t1
- (
- col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
- ) CHARACTER SET latin1 COLLATE latin1_bin;
-
- ALTER TABLE t1 MODIFY
- col1 VARCHAR(5)
- CHARACTER SET latin1
- COLLATE latin1_swedish_ci;
Client和MySQL Server交互前,先建立连接(Connection)。
Client通过建立的connection发送SQL Statements(查询、插入等操作)到MySQL Server;MySQL Server则通过建立的connection返回给Client相应的结果(SQL执行结果,或者错误信息)。
查看connection相关的session变量:
- SHOW SESSION VARIABLES LIKE 'character\_set\_%';
- SHOW SESSION VARIABLES LIKE 'collation\_%';
- SET NAMES {'charset_name'
- [COLLATE 'collation_name'] | DEFAULT}
SET NAME 会设置三个session变量(session system variables)为指定的charset和collation:
- SET {CHARACTER SET | CHARSET}
- {'charset_name' | DEFAULT}
SET CHARACTER SET会设置 character_set_client 和 character_set_results为指定的charset;
并把 character_set_connection 设置为 character_set_database 的charset。
原文链接:https://www.cnblogs.com/codesee/p/14519975.html
如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。