最近收到研发的需求是线上业务表中有个字段需要存储表情 ,但是目前该实例设置的字符集为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节,“连接字符集和校对规则”。)在客户端请求的值未知或不可用,或者服务器配置为忽略客户端请求的情况下,将使用变量的全局值来设置会话值:
-
客户端请求了一个服务器未知的字符集。例如,一个支持日语的客户端在连接到未配置为支持sjis的服务器时请求sjis。
-
客户端来自MySQL 4.1之前的版本,因此不请求字符集。
-
使用
--skip-character-set-client-handshake
选项启动了mysqld
,这会导致它忽略客户端的字符集配置。这再现了MySQL 4.0的行为,在希望升级服务器而不升级所有客户端时很有用。 -
有些字符集不能用作客户端字符集。尝试将它们用作
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_database
和collation_database
系统变量已被弃用;预计将在未来版本的MySQL中移除它们。
在MySQL 5.7中,为会话的character_set_database
和collation_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 DATA
和SELECT ... 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"