MySQL字符集参数详解

发布于:2024-08-16 ⋅ 阅读:(152) ⋅ 点赞:(0)

最近收到研发的需求是线上业务表中有个字段需要存储表情 ,但是目前该实例设置的字符集为utf8 ,所以需要改成utf8mb4。

数据库中关于字符集的参数有很多,大家是否真的理解这些字符集的含义 

以下是MySQL官方文档(5.7版本)中关于字符集参数的解释

character_set_client

System Variable character_set_client
Scope Global, Session
Dynamic Yes
Type String
Default Value utf8

客户端发送语句时使用的字符集。此变量的会话值是根据客户端连接到服务器时客户端请求的字符集来设置的。(许多客户端支持一个--default-character-set选项,以便明确指定此字符集。另请参阅第10.4节,“连接字符集和校对规则”。)在客户端请求的值未知或不可用,或者服务器配置为忽略客户端请求的情况下,将使用变量的全局值来设置会话值:

  1. 客户端请求了一个服务器未知的字符集。例如,一个支持日语的客户端在连接到未配置为支持sjis的服务器时请求sjis。

  2. 客户端来自MySQL 4.1之前的版本,因此不请求字符集。

  3. 使用--skip-character-set-client-handshake选项启动了mysqld,这会导致它忽略客户端的字符集配置。这再现了MySQL 4.0的行为,在希望升级服务器而不升级所有客户端时很有用。

  4. 有些字符集不能用作客户端字符集。尝试将它们用作character_set_client的值会产生错误。请参阅“不允许的客户端字符集”。

character_set_connection

System Variable character_set_connection
Scope Global, Session
Dynamic Yes
Type String
Default Value utf8

用于没有指定字符集引入符的字面值以及数字到字符串转换的字符集。关于引入符的信息,请参阅第10.3.8节,“字符集引入符”。

character_set_database

System Variable character_set_database
Scope Global, Session
Dynamic Yes
Type String
Default Value latin1
Footnote This option is dynamic, but should be set only by server. You should not set this variable manually.

数据库默认使用的字符集。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量的值与character_set_server相同。

在MySQL 5.7中,全局的character_set_databasecollation_database系统变量已被弃用;预计将在未来版本的MySQL中移除它们。

在MySQL 5.7中,为会话的character_set_databasecollation_database系统变量分配值已被弃用,并且分配值会产生警告。您应该预期在未来的MySQL版本中,这些会话变量将变为只读,并且分配值将产生错误,但您仍然可以访问会话变量以确定默认数据库的数据库字符集和校对规则。

character_set_server

Command-Line Format --character-set-server=name
System Variable character_set_server
Scope Global, Session
Dynamic Yes
Type String
Default Value latin1

服务器默认的字符集。请参阅第10.15节,“字符集配置”。如果您设置了此变量,您还应该设置collation_server以指定该字符集的校对规则。


character_set_filesystem

Command-Line Format --character-set-filesystem=name
System Variable character_set_filesystem
Scope Global, Session
Dynamic Yes
Type String
Default Value binary

文件系统字符集。此变量用于解释引用文件名的字符串字面量,例如在LOAD DATASELECT ... INTO OUTFILE语句以及LOAD_FILE()函数中。在尝试打开文件之前,这些文件名会从character_set_client转换为character_set_filesystem。默认值是binary,这意味着不会发生转换。对于允许多字节文件名的系统,可能需要使用不同的值。例如,如果系统使用UTF-8表示文件名,则应将character_set_filesystem设置为'utf8mb4'

character_set_results

System Variable character_set_results
Scope Global, Session
Dynamic Yes
Type String
Default Value utf8

用于将查询结果返回给客户端的字符集。这包括结果数据(如列值)、结果元数据(如列名)和错误消息。

character_set_system

System Variable character_set_results
Scope Global
Dynamic No
Type String
Default Value utf8

服务器用于存储标识符的字符集。其值始终是utf8。

character_sets_dir

Command-Line Format --character-sets-dir=dir_name
System Variable character_sets_dir
Scope Global
Dynamic No
Type Directory name

字符集安装的目录。请参阅第10.15节,“字符集配置”。

实例的默认字符集为 utf8

表的字符集也是utf8 

使用Python简单编写一个

只能自己写个客户端进行测试 

客户端字符集参数使用  charset="utf8" 


网站公告

今日签到

点亮在社区的每一天
去签到