Разница между SET NAMES и SET CHARSET - PullRequest
       10

Разница между SET NAMES и SET CHARSET

0 голосов
/ 28 августа 2018

Проще говоря, в чем разница:

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 голосов
/ 29 августа 2018

Вот краткое изложение того, какие переменные установлены каждым оператором:

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.

...