在阅读O’Reilly的“高性能MySQL”时,我偶然发现了以下内容
另一个常见的垃圾查询是SET NAMES UTF8,无论如何这是错误的处理方式(它不会更改客户端库的字符集;它仅影响服务器)。
我有点困惑,因为我曾经将“ SET NAMES utf8”放在每个脚本的顶部,以使数据库知道我的查询是utf8编码的。
任何人都可以评论以上引用,或者,更正式地说,是什么建议或最佳实践,以确保我的数据库工作流可识别unicode。
如果相关,我的目标语言是php和python。
mysql_set_charset()将是一个选择- 但仅限于ext/mysql。为此ext/mysqli,mysqli_set_charset并且您需要指定连接参数。PDO::mysql
mysql_set_charset()
ext/mysql
ext/mysqli
mysqli_set_charset
PDO
::mysql
使用此函数会导致MySQL API调用,因此应认为它比发出查询要快得多。
在性能方面,确保脚本和MySQL服务器之间基于UTF-8通讯的最快方法是正确设置MySQL服务器。由于SET NAMES x是等同于
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。
SET character_set_connection = x
SET collation_connection = <<default_collation_of_character_set_x>>
my.ini/cnf
请注意在同一MySQL服务器实例上运行的其他应用程序可能需要的问题,并且需要其他一些字符集。