Server Character Set and Collation
- 默认值为:utf8mb4、utf8mb4_0900_ai_ci
以下几种方法可以修改:
- 可以在启动server时的命令行指定,由于默认值的原因,以下三种效果是等价的
mysqld
mysqld --character-set-server=utf8mb4
mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci
- 修改my.cnf(Windows下是my.ini)文件
[mysqld]
character-set-server=utf8mb4
- 重新编译:
cmake . -DDEFAULT_CHARSET=latin1 -DDEFAULT_COLLATION=latin1_german1_ci
(没用过) - 动态修改:
set names utf8mb4;
(只对当前connect有效,建议不用)
- 查看编码:
SHOW VARIABLES LIKE 'character_set_%';
-
CREATE DATABASE
如果不指定Character Set和Collation,则默认取server的
Database Character Set and Collation
- 创建和更新数据库Character Set和Collation语法:
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]
- 不同的Database可以设置不同的Character Set和Collation
- 查看数据库Character Set和Collation的可选项可用:
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
数据库字符集和排序规则的优先级
- 指定Character Set和Collation,则为指定的(推荐使用)
- 指定Character Set未指定Collation,则Collation取Character Set关联的默认Collation
- 指定Character Set未指定,则Character Set取Collation关联的默认Character Set
- 都未指定,取server的默认值
查看数据库的字符集和排序规则的值:
-- 第一种
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';
数据库的字符集和排序规则的用处
-
CREATE TABLE
不指定字符集和排序规则,则使用数据库的默认值 -
LOAD DATA
服务器使用character_set_database
系统变量指示的字符集来解释文件中的信 - 对于函数和储存过程,不指定字符集和排序规则时,字符参数的字符集和排序规则使用数据库的默认值
TMS都交由阿里云管理,各种参数配置和创建数据库都在阿里云页面操作即可。