在带有“PDO::MYSQL_ATTR_INIT_COMMAND”的 PDO 中“SET CHARACTER SET utf8”是否必要?
在 PHP 和 MySQL 中,“SET NAMES” utf8”和“SET CHARACTER SET utf8”通常在使用 UTF-8 编码时使用。但是,当使用 PDO 时,“PDO::MYSQL_ATTR_INIT_COMMAND”参数将我们限制为单个查询。因此,必须考虑在此上下文中是否需要“SET CHARACTER SET utf8”。
“SET CHARACTER SET utf8”对连接设置的影响
使用 " “SET NAMES utf8”之后的“SET CHARACTER SET utf8”会将“character_set_connection”和“collation_connection”重置为数据库的默认设置(“@@character_set_database”和“@@collation_database”)。
区别"SET NAMES" 和 "SET CHARACTER SET"
"SET NAMES x" 影响:
"SET CHARACTER SET x"影响:
字符编码/转码过程
MySQL通过多个转码步骤处理查询和结果:
默认数据库字符集的意义
如果数据库的默认字符集不是UTF-8,使用“SET CHARACTER SET utf8”可能不完全启用 UTF-8 支持。这是因为如果列排序规则与 UTF-8 不兼容,转码过程的第 3 步可能会导致数据丢失。
结论
一般来说,“SET NAMES utf8”是处理字符集问题的首选方法。在“my.cnf”中设置MySQL服务器变量可以避免每个连接上不必要的SET命令的性能开销。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3