php - 是否使用 "SET NAMES"

标签 php python mysql internationalization

在阅读 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 xequivalent

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/

相关文章:

php - SQL中按2个条件排序?

python - 在 Mac OS X 10.6 上重新安装 Python 2.6

php - 与 Laravel 在处理数百万条记录时使用 block 的普通查询构建器相比,Laravel Eloquents 和使用 block 是否更慢?

php - 尾部斜杠导致页面跳转到 404

php - $form->createView() 在 Symfony2 中无错误地挂起(失控的内存使用)

php - Laravel 使用多少成本/回合进行哈希处理?

python - 在 python 虚拟环境之间切换

python - 如何将 .txt 文件的内容分配给 Python 中的字符串变量?

php - 如果用户已经预订了同一家酒店,则向他们显示一条消息

php - 如何将验证链接发送到电子邮件地址?