设置字符集

Exisi 2023-01-26 02:38:16
Categories: Tags:
  • 设置字符集一般有两种方法,一种是在创建的时候设置字符集

 

语句

说明

CREATE DATABASE [db_name]

DEFAULT CHARACTER SET = [character set]

创建数据库时设置字符集

CREATE TABLE [tb_name]

DEFAULT CHARACTER SET = [character set]

创建数据表时设置字符集

 

  • 另一种是数据表建成之后修改字符集

 

 

 

设置全局字符集

  • mysql 中使用SET语句设置全局字符串集

语法

SET character_set_[value] = [character set]

 

变量名

含义

character_set_client

设置客户端使用的字符集。

character_set_connection

设置连接数据库时的字符集,当程序里没指定连接数据库的字符集时的选项。

character_set_database

设置创建数据库时默认字符集,即创建数据库时不指定字符集时的选项。

character_set_filesystem

文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。

character_set_results

数据库给客户端返回时使用的字符集,如果没指定则用character_set_server

character_set_server

服务器的默认字符集。

character_set_system

数据库系统存储系统元数据的字符集,该值为utf8

character_sets_dir

字符集安装的目录。

 

 

 

MySQL服务启动时设置字符集

  • 可以在MySQL服务启动时,指定server字符集。如不指定,默认的字符集为latin1

 

mysqld --character-set-server=utf8

 

 

 

设置客户端字符集

  • MySQL数据库客户端字符集进行设置,对于防止MySQL更新时,出现中文乱码有极大的影响

 

  • 临时生效单条命令法

SET names utf8;
SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

 

  • 登录数据库时指定字符集

mysql --default-character-set = utf8;

 

  • 通过修改my.cnf实现修改MySQL客户端的字符集

[client]
default-character-set = utf8

  • 人工登录数据库执行“set names UTF8”,以及使用MySQL命令指定字符集登录操作,或者更改my.cnf配置文件客户端模块的参数,来实现更改客户端字符集,都是改变了MySQL客户端的clientconnectionresults3个参数的字符集。

 

 

 

修改库的字符集

  • 使用 ALTER 语句可以对数据库的字符集进行修改

语法

ALTER DATABASE <数据库名> DEFAULT CHARACTER SET <字符集>;

示例

mysql>ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;

Query OK, 0rows affected (0.58 sec)

  • 只明确了charset_name,但collation_name未明确,则字符集采用charset_name,字符序采用charset_name对应的默认校验规则。

 

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

 

  • mysql8.0以下版本中,你如果什么都不修改,默认的CHARSETLatin1,默认的COLLATElatin1_swedish_ci。从mysql8.0开始,默认的CHARSET已经改为了utf8mb4,默认的COLLATE改为了utf8mb4_0900_ai_ci

 

 

 

修改表的字符集

  • 使用 ALTER 语句可以对数据表的字符集进行修改

语法

ALTER TABLE <数据表名> CHARACTER SET <字符集>;

示例

mysql>ALTER DATABASE test1 CHARACTER SET utf8;
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   #修改后的字符集
1row inset(0.00sec)

  • 只明确了charset_name,但collation_name未明确,则字符集采用charset_name,字符序采用charset_name对应的默认校验规则。
  • charset_namecollation_name均未明确,则采用数据库的字符集、校验规则设置

 

 

 

修改字段的字符集

  • 使用 ALTER 语句可以对数据库的字符集进行修改

语法

ALTER TABLE <数据表名> MODIFY NAME CHAR(10) CHARACTER SET <字符集>;

示例

mysql> ALTER TABLE test1 MODIFY NAME CHAR(10) CHARACTER SET gbk;
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)

  • 只明确了charset_name,但collation_name未明确,则字符集采用charset_name,字符序采用charset_name对应的默认校验规则。
  • charset_namecollation_name均未明确,则采用数据表的字符集、校验规则设置

 

 

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