一尘不染

是否使用“设置名称”

mysql

在阅读O’Reilly的“高性能MySQL”时,我偶然发现了以下内容

另一个常见的垃圾查询是SET NAMES UTF8,无论如何这是错误的处理方式(它不会更改客户端库的字符集;它仅影响服务器)。

我有点困惑,因为我曾经将“ SET NAMES utf8”放在每个脚本的顶部,以使数据库知道我的查询是utf8编码的。

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

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


阅读 205

收藏
2020-05-17

共1个答案

一尘不染

mysql_set_charset()将是一个选择-
但仅限于ext/mysql。为此ext/mysqlimysqli_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服务器实例上运行的其他应用程序可能需要的问题,并且需要其他一些字符集。

2020-05-17