mysql - 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
有一个可选COLLATE
的collation_connection
.
解决方案
以下是每个语句设置的变量的摘要:
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 实现兼容。
推荐阅读
- javascript - 当两个 div 重叠时 - 第一个的颜色应该改变
- spring-websocket - Spring WebSocket ConvertAndSendToUser 不工作但 convertAndSend 工作
- for-loop - 这个 FOR 循环的时间和空间复杂度是多少?
- html - 如何将完成的网站发送给我的客户?
- python - Python:基于同一组的多个条目进入不同的列
- vba - 删除书签后的所有文本
- html - 如何淡出并用 CSS 动画替换单词?
- python - 如何检查“if”条件下的错误以做出决定?
- git - 有没有关于如何在 Jenkins 中使用 Job DSL 配置 GitLab 组的文档?
- java - 如何插入 (int) 和 (date) 类型?