在 MySQL 中设置名称 utf8?

2022-08-30 07:13:05

我经常在使用MySQL的PHP脚本中看到类似的东西

query("SET NAMES utf8");   

我从来没有为任何项目这样做过,所以我有几个基本问题。

  1. 这是仅用PDO完成的事情吗?
  2. 如果它不是PDO特有的东西,那么这样做的目的是什么呢?我意识到它正在为mysql设置编码,但我的意思是,我从来没有使用它,所以我为什么要使用它?

答案 1

每当您要向服务器发送包含无法用纯 ASCII 表示的字符(如“ñ”或“ö”)时,都需要它。

如果MySQL实例未配置为默认从客户端连接中期望UTF-8编码(许多都是,具体取决于您的位置和平台)。

阅读 http://www.joelonsoftware.com/articles/Unicode.html 以防您不知道Unicode是如何工作的。

请阅读是否使用“设置名称”以查看设置名称替代项及其确切含义。


答案 2

手册中:

“设置名称”指示客户端将使用哪个字符集将 SQL 语句发送到服务器。

更详细地说,(再次,从手册中无端地解除):

“设置名称”指示客户端将使用哪个字符集将 SQL 语句发送到服务器。因此,SET NAMES 'cp1251' 告诉服务器,“将来从此客户端传入的消息采用字符集 cp1251。它还指定服务器用于将结果发送回客户端的字符集。(例如,它指示如果使用 SELECT 语句,则对列值使用什么字符集。


推荐