是否使用“SET NAMES”

在阅读O'Reilly的“高性能MySQL”时,我偶然发现了以下情况

另一个常见的垃圾查询是SET NAMES UTF8,这是一种错误的做事方式(它不会改变客户端库的字符集;它只影响服务器)。

我有点困惑,因为我曾经在每个脚本的顶部放置“SET NAMES utf8”让db知道我的查询是utf8编码的。

任何人都可以评论上述引用,或者,更正式地说,您的建议/最佳实践是什么,以确保我的数据库工作流是unicode意识。

如果这是相关的,我的目标语言是php和python。


喵喵时光机
浏览 626回答 3
3回答

繁花不似锦

mysql_set_charset()将是一个选择 - 但一个选项仅限于ext/mysql。对于ext/mysqli它是mysqli_set_charset和你需要指定一个连接参数。PDO::mysql由于使用此函数会导致MySQL API调用,因此应该将其视为比发出查询快得多。在性能方面,确保脚本和MySQL服务器之间基于UTF-8的通信的最快方法是正确设置MySQL服务器。由于SET NAMES x是等同于SET character_set_client = x;SET character_set_results = x;SET character_set_connection = x;而在SET character_set_connection = x内部也执行,SET collation_connection = <<default_collation_of_character_set_x>>您也可以静态设置这些服务器变量my.ini/cnf。请注意在同一MySQL服务器实例上运行的其他应用程序可能存在的问题,并且需要其他一些字符集。
打开App,查看更多内容
随时随地看视频慕课网APP