我经常在使用 MySQL 的 PHP 脚本中看到类似的东西
query("SET NAMES utf8");
我从来没有为任何项目这样做,所以我有一些基本的问题关于它。
无论何时,只要您希望向服务器发送具有不能用纯 ASCII 表示的字符的数据,比如‘ ñ’或‘ ö’,就需要使用它。
如果 MySQL 实例没有配置为默认情况下期望从客户端连接获得 UTF-8编码(根据您的位置和平台,许多连接都是 UTF-8编码)
如果您不知道 Unicode 是如何工作的,请阅读 http://www.joelonsoftware.com/articles/Unicode.html。
阅读 Whether to use "SET NAMES"以查看 SETNAMES 备选方案以及它到底是关于什么的。
From the 手动操作:
SETNAMES 指示什么字符集 客户端将用于发送 SQL 语句发送到服务器。
更详细地说(再一次无缘无故地从 手动操作中提取出来) :
SET NAMES indicates what character set 客户端将用于发送 SQL 语句发送到服务器。因此,SET 名称‘ cp1251’告诉服务器, ”未来来自这里的信息 client are in character set cp1251.” It also specifies the character set 服务器应该用来发送 results back to the client. (For 例子,它指示什么字符 设置为用于列值 使用 SELECT 语句。)
这个查询应该写在在数据库中创建或更新数据的查询之前,这个查询看起来像:
mysql_query("set names 'utf8'");
请注意,您应该编写的编码,您正在使用的标题,例如,如果您使用 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>
Getting encoding right is really tricky - there are too many layers:
来自 PHP 的 SQL 命令“ SET CHARSET utf8”将确保客户端(PHP)将获得 utf8中的数据,无论它们如何存储在数据库中。当然,首先需要正确地存储它们。
为表/列定义的编码并不意味着数据就在那种编码中。如果您有一个定义为 utf8但存储为不同编码的表,那么 MySQL 将把它们视为 utf8,这样您就有麻烦了。也就是说你得先解决这个问题。
utf8
您需要检查每一层的数据流的编码方式。
如果你在 windows-1250中接收数据,并且想要存储在 utf-8中,那么在存储之前使用这个 SQL:
windows-1250
utf-8
SET NAMES 'cp1250';
如果数据库中的数据为 windows-1250,并且希望检索 utf8,请使用:
SET CHARSET 'utf8';
谢谢大家!
don't use: query("SET NAMES utf8"); this is setup stuff and not a query. put it right afte a connection start with setCharset() (or similar method)
实际上是一件小事:
状况:
只要 mysql 能够处理字符,存储和读取数据就没有问题。 if you look in the db you will already see there is crap in it (e.g.using phpmyadmin).
until now this is not a problem! (wrong but works often (in europe)) ..
. . 除非另一个客户端/程序或一个更改过的库正常工作,将读取/保存数据。那么你就有大麻烦了!
使用 php 函数: mysqli: : set _ charset 代替通过 SQL 查询执行此操作 Mysqli _ set _ charset
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 字符集概念部分。
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
解决办法就是
$conn->set_charset("utf8");
不仅仅是 PDO。如果 sql 回答像“ ? ? ? ?”符号,预设你的字符集(希望是 UTF-8)真的推荐:
if (!$mysqli->set_charset("utf8")) { printf("Can't set utf8: %s\n", $mysqli->error); }
或通过程序样式 mysqli_set_charset($db,"utf8")
mysqli_set_charset($db,"utf8")