mysql指定collation_MySQL character set、collation(整理)

1 查看当前设置

Character: 字符集

Collation:在同一字符集内字符之间的比较规则、排序

collation查看:

SHOW VARIABLES LIKE 'collation_%';

+----------------------+--------------------+

| Variable_name | Value |

+----------------------+--------------------+

| collation_connection | utf8_general_ci |

| collation_database | utf8mb4_general_ci |

| collation_server | utf8mb4_general_ci |

+----------------------+--------------------+

character set查看:

SHOW VARIABLES LIKE 'character_set_%';

+--------------------------+----------------------------------+

| Variable_name | Value |

+--------------------------+----------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

2 设置

mysql 命令:

SET Variable_name = Value

1 服务器级

(/etc/mysql/my.cnf)里设置:

[mysqld]

character_set_server=utf8

collation_server=utf8_general_ci

2 数据库级

若没有显式设置,则自动使用服务器级的配置

显式设置,在创建库时指定

3 表级

查看:show create table �table_name;

没有显式设置,则自动使用数据库级的配置

显式设置,在创建表时指定

CREATE TABLE `b` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`sid` int(11) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4 列级

若没有显式设置,则自动使用表级的配置

显式设置:在创建时指定

5 连接级别

# 服务端使用这个编码来理解客户端发来的

character_set_client;

# 连接层字符集 character_set_client 转 character_set_connection

show variables like 'character_set_connection' ;

# 服务端使用这个编码回送结果集和错误信息

show variables like 'character_set_results';

3 常见问题

向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集,查询时设置连接字符集为utf8

插入时根据MySQL服务器的默认设置,character_set_client、character_set_connection和character_set_results均为latin1

插入操作的数据将经过latin1=>latin1=>utf8的字符集转换过程,这一过程中每个插入的汉字都会从原始的3个字节变成6个字节保存

向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8

插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8

插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有\u0000~\u00ff范围以外的Unicode字符,会因为无法在latin1字符集中表示而被转换为“?”(0×3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。转换过程如下图:

4 建议

建立数据库/表和进行数据库操作时尽量显式指出使用的字符集,而不是依赖于MySQL的默认设置,否则MySQL升级时可能带来很大困扰;

一般情况下将数据库和连接字符集都置为utf8、utf8mb4是较好的选择;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值