我经常在使用MySQL的PHP脚本中看到类似于下面的内容
query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
我从来没有为任何项目做过这个,所以我有几个关于它的基本问题.
Vin*_*vic 71
每当您想要将数据发送到具有无法用纯ASCII表示的字符的服务器时,就需要它,例如'ñ'或'ö'.
如果MySQL实例未配置为默认情况下从客户端连接预期UTF-8编码(许多是,取决于您的位置和平台.)
如果您不了解Unicode的工作原理,请阅读http://www.joelonsoftware.com/articles/Unicode.html.
阅读是否使用"SET NAMES"查看SET NAMES替代品以及它究竟是什么.
Ond*_*žka 32
正确编码是非常棘手的 - 层数太多了:
PHP中的SQL命令"SET CHARSET utf8"将确保客户端(PHP)将获取utf8中的数据,无论它们如何存储在数据库中.当然,首先需要正确存储它们.
为表/列定义的编码并不真正意味着数据处于该编码中.如果您碰巧将表定义为utf8存储为differtent编码,那么MySQL会将它们视为utf8并且您遇到麻烦.这意味着你必须先解决这个问题.
您需要检查每层的数据流编码.
如果您在例如windows-1250,并且想要存储中接收数据utf-8,则在存储之前使用此SQL:
SET NAMES 'cp1250';
Run Code Online (Sandbox Code Playgroud)
如果您在数据库中有数据windows-1250并希望进行检索utf8,请使用:
SET CHARSET 'utf8';
Run Code Online (Sandbox Code Playgroud)
不要依赖太"智能"的工具来显示数据.例如,phpMyAdmin(当我使用它时正在做)编码真的很糟糕.它遍历所有层次,因此很难找到.此外,Internet Explorer实际上是基于奇怪的规则"猜测"编码的愚蠢行为.使用简单的编辑器可以切换编码.另外,我推荐MySQL Workbench.
usa*_*man 19
此查询应在创建或更新数据库中的数据的查询之前编写,此查询如下所示:
mysql_query("set names 'utf8'");
Run Code Online (Sandbox Code Playgroud)
请注意,您应该在标题中编写您正在使用的编码,例如,如果您使用utf-8,则在标题中将其添加为此类,否则将导致Internet Explorer出现问题
所以你的页面看起来像这样
<html>
<head>
<title>page title</title>
<meta charset="UTF-8" />
</head>
<body>
<?php
mysql_query("set names 'utf8'");
$sql = "INSERT * FROM ..... ";
mysql_query($sql);
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
小智 5
而不是通过SQL查询执行此操作使用php函数:mysqli :: set_charset mysqli_set_charset
Run Code Online (Sandbox Code Playgroud)Note: This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended.有关更多信息,请参阅MySQL字符集概念部分.
来自http://www.php.net/manual/en/mysqli.set-charset.php