在阅读 O'Reilly 的“高性能 MySQL”时,我偶然发现了以下内容
Another common garbage query is SET NAMES UTF8, which is the wrong way to do things anyway (it does not change the client library's character set; it affects only the server).
我有点困惑,因为我曾经将“SET NAMES utf8”放在每个脚本的顶部,让数据库知道我的查询是 utf8 编码的。
任何人都可以评论上述引用,或者更正式地说,您有什么建议/最佳实践以确保我的数据库工作流程是 unicode 感知的。
如果相关的话,我的目标语言是 php 和 python。
最佳答案
mysql_set_charset()
将是一个选项 - 但选项仅限于 ext/mysql
.对于 ext/mysqli
它是 mysqli_set_charset
对于 PDO
::mysql
你需要指定一个连接参数。
由于使用此函数会导致 MySQL API 调用,因此应该认为它比发出查询要快得多。
在性能方面,确保脚本和 MySQL 服务器之间基于 UTF-8 的通信的最快方法是正确设置 MySQL 服务器。如SET NAMES x
是 equivalent到
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>>
也可以设置these server variables静态地在您的 my.ini/cnf
中.
请注意在同一 MySQL 服务器实例上运行的其他应用程序可能会出现问题,并且需要一些其他字符集。
关于php - 是否使用 "SET NAMES",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650591/