SET NAMES和SET CHARSET之间的区别

时间:2018-08-28 13:18:42

标签: mysql mysqli pdo mariadb

简单地说,两者之间有什么区别

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具有可选的COLLATE可以设置collation_connection

希望有人可以对此有所启发...

1 个答案:

答案 0 :(得分:2)

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

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不会将连接字符集设置为您在参数中指定的字符集,而是将其设置为当前默认数据库的字符集,也就是说,如果您已完成{{1} }。

为什么两个语句都存在?我不知道,我从MySQL 4.1开始就检查了手册,两个语句都在那里,但是没有解释为什么他们需要两个语句。

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