首页 > 解决方案 > SET NAMES 和 SET CHARSET 的区别

问题描述

简单地说,有什么区别:

https://dev.mysql.com/doc/refman/5.7/en/set-character-set.html

https://dev.mysql.com/doc/refman/5.7/en/set-names.html

我查看了连接字符集页面:

https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html

我已经检查过了SHOW VARIABLES LIKE 'char%'SHOW VARIABLES LIKE 'collation%'但我无法指出两者之间的区别,除了SET NAMES有一个可选COLLATEcollation_connection.

标签: mysqlmariadb

解决方案


以下是每个语句设置的变量的摘要:

Variable                 SET NAMES   SET CHARSET
character_set_client     argument    argument
character_set_results    argument    argument
character_set_connection argument    default for default db
collation_connection     argument*   default for default db

所以最大的区别是 SET CHARSET 不会将连接字符集设置为您在参数中指定的字符集,而是将其设置为您当前默认数据库的字符集,也就是说,如果您已经完成了USE <database>.

为什么这两种说法都存在?我不知道,我一直检查手册到 MySQL 4.1 并且两个语句都在那里,但没有解释为什么他们需要两个语句。

我猜这是为了与其他 SQL 实现兼容。


推荐阅读