MySQL字符集参数详解

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

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

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

character_set_client

System Variablecharacter_set_client
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

客户端发送语句时使用的字符集。此变量的会话值是根据客户端连接到服务器时客户端请求的字符集来设置的。(许多客户端支持一个--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 Variablecharacter_set_connection
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

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

character_set_database

System Variablecharacter_set_database
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1
FootnoteThis 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 Variablecharacter_set_server
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1

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


character_set_filesystem

Command-Line Format--character-set-filesystem=name
System Variablecharacter_set_filesystem
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuebinary

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

character_set_results

System Variablecharacter_set_results
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

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

character_set_system

System Variablecharacter_set_results
ScopeGlobal
DynamicNo
TypeString
Default Valueutf8

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

character_sets_dir

Command-Line Format--character-sets-dir=dir_name
System Variablecharacter_sets_dir
ScopeGlobal
DynamicNo
TypeDirectory name

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

实例的默认字符集为 utf8

表的字符集也是utf8 

使用Python简单编写一个

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

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

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值