- 设置字符集一般有两种方法,一种是在创建的时候设置校验规则
语句 |
说明 |
CREATE DATABASE [db_name] DEFAULT COLLATE = [character set] |
创建数据库时设置校验规则 |
CREATE TABLE [tb_name] DEFAULT COLLATE SET = [character set] |
创建数据表时设置检验规则 |
- 另一种是数据表建成之后修改校验规则,COLLATE 语句可以在任何语句中使用覆盖原有的检验规则,优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 服务器别设置
注
不同校验规则连表查会报错,可以在语句中分别指定校验规则
在MySQL服务启动时设置校验规则
- 可以在MySQL服务启动时,指定字符序
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
设置客户端校验规则
- 通过修改 my.cnf / my.ini 实现修改MySQL客户端的校验规则
[client]
default-character-set = utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
修改库的校验规则
- 使用 ALTER 语句可以对数据库的字符集进行修改
语法
ALTER DATABASE <数据库名> DEFAULT COLLATE <校验规则>;
示例
mysql>ALTER DATABASE test1 DEFAULT DEFAULT COLLATE gbk_chinese_ci ;
Query OK, 0rows affected (0.58 sec)
注
- 只明确了collation_name,但charset_name未明确,则字符序采用collation_name,字符集采用collation_name关联的字符集。
- 如果库级别没有设置CHARSET和COLLATE,则库级别默认的CHARSET和COLLATE使用实例级别的设置。
- 在mysql8.0以下版本中,你如果什么都不修改,默认的CHARSET是Latin1,默认的COLLATE是latin1_swedish_ci。从mysql8.0开始,默认的CHARSET已经改为了utf8mb4,默认的COLLATE改为了utf8mb4_0900_ai_ci
修改表的校验规则
- 使用 ALTER 语句可以对数据表的字符集进行修改
语法
ALTER TABLE <数据表名> CHARACTER SET <字符集> COLLATE <校验规则>;
示例
mysql>ALTER DATABASE test1 CHARACTER SET utf8 COLLATE utf8_general_ci ;
Query OK, 0rows affected (0.58
sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>SHOW CREATE TABLE
test1\G
***************************1. row ***************************
Table: test1
CreateTable: CREATETABLE `test1` (
`id` int(6)
DEFAULT NULL,
`name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET = utf8 COLLATE utf8_general_ci
1row inset(0.00sec)
注
- 只明确了collation_name,但charset_name未明确,则字符序采用collation_name,字符集采用collation_name关联的字符集。
- charset_name、collation_name均未明确,则采用数据库的字符集、校验规则设置
修改字段的校验规则
- 使用 ALTER 语句可以对数据库的字符集进行修改
语法
ALTER TABLE <数据表名> MODIFY NAME CHAR(10) CHARACTER SET <字符集> COLLATE <校验规则>;
示例
mysql> ALTER TABLE test1 MODIFY NAME CHAR(10) CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected (0.58
sec)
Records: 0
Duplicates: 0 Warnings: 0
mysql> show full columns from test1;
+-------+-----------+-------------------+-------+-----+----------+--------+-------------------------------------+-----------+
| Field | Type
|
Collation | Null | Key | Default | Extra | Privileges
|
Comment |
+-------+-----------+-------------------+-------+-----+----------+--------+-------------------------------------+-----------+
| id | int(6) | NULL |
YES | | NULL | | select,insert,update,references
| |
| name | char(10) | gbk_chinese_ci | YES | | NULL | | select,insert,update,references
| |
+-------+-----------+-------------------+-------+-----+----------+--------+-------------------------------------+-----------+
2 rows in set (0.01
sec)
注
- 只明确了collation_name,但charset_name未明确,则字符序采用collation_name,字符集采用collation_name关联的字符集。
- charset_name、collation_name均未明确,则采用数据表的字符集、校验规则设置
来自 <https://www.cnblogs.com/yangmingxianshen/p/7999428.html>