设置校验规则

Exisi 2023-01-26 14:43:16
Categories: Tags:
  • 设置字符集一般有两种方法,一种是在创建的时候设置校验规则

 

语句

说明

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关联的字符集。

 

  • 如果库级别没有设置CHARSETCOLLATE,则库级别默认的CHARSETCOLLATE使用实例级别的设置。

 

  • mysql8.0以下版本中,你如果什么都不修改,默认的CHARSETLatin1,默认的COLLATElatin1_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_namecollation_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_namecollation_name均未明确,则采用数据表的字符集、校验规则设置

 

 

 

来自 <https://www.cnblogs.com/yangmingxianshen/p/7999428.html>