我经常在使用mysql的php脚本中看到类似的内容
query("SET NAMES utf8");
我从来没有为任何项目做过这个,所以我有几个基本的问题。这只是pdo做的事情吗?如果这不是pdo特有的事情,那么做的目的是什么?我知道这是为mysql设置编码,但我的意思是,我从来没有使用过它,所以为什么我要使用它?
2nbm6dog1#
根据手册:set names指示客户端将使用哪个字符集向服务器发送sql语句。更细致地说(再一次,从手册中无缘无故地提出来):set names指示客户端将使用哪个字符集向服务器发送sql语句。因此,集合名称“cp1251”告诉服务器,“来自此客户机的未来传入消息位于字符集cp1251中。”它还指定服务器应用于将结果发送回客户机的字符集(例如,如果使用select语句,它将指示要用于列值的字符集。)
yqlxgs2m2#
解决办法是
$conn->set_charset("utf8");
63lcw9qa3#
正确编码真的很棘手-层太多了:浏览器页码PHPmysql数据库php中的sql命令“set charset utf8”将确保客户端(php)将以utf8格式获取数据,无论这些数据如何存储在数据库中。当然,它们首先需要正确存储。
为表/列定义的编码实际上并不意味着数据采用该编码。如果碰巧有一个表定义为 utf8 但是存储为不同的编码,那么mysql将把它们当作 utf8 你有麻烦了。这意味着你必须先解决这个问题。
utf8
您需要检查每个层的数据流编码是什么。检查http头,头。检查请求正文中真正发送的内容。别忘了mysql几乎无处不在:数据库table柱整个服务器客户确保每个地方都有合适的。
如果您收到数据,例如。 windows-1250 ,并希望存储在 utf-8 ,然后在存储之前使用此sql:
windows-1250
utf-8
SET NAMES 'cp1250';
如果数据库中有数据 windows-1250 想重新获得 utf8 ,使用:
SET CHARSET 'utf8';
不要依赖太“聪明”的工具来显示数据。e、 phpmyadmin(在我使用它的时候)编码非常糟糕。它穿过了所有的层所以很难找到。另外,InternetExplorer有一种非常愚蠢的行为,即根据奇怪的规则“猜测”编码。使用可以切换编码的简单编辑器。我推荐mysql workbench。
2vuwiymt4#
使用php函数mysqli::set\u charset mysqli\u set\u charset,而不是通过sql查询执行此操作
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
ff29svar5#
每当您想向服务器发送数据时,需要使用纯ascii无法表示的字符,如'ñ' 或'ö'.如果mysql示例没有配置为在默认情况下从客户机连接期望utf-8编码(根据您的位置和平台,很多都是这样)阅读http://www.joelonsoftware.com/articles/unicode.html 以防您不知道unicode是如何工作的。阅读是否使用“集合名称”来查看集合名称替代方案,以及它到底是关于什么的。
gwbalxhn6#
不仅仅是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")
6bc51xsx7#
谢谢大家!不使用:query(“set names utf8”);这是安装程序,不是查询。用setcharset()或类似的方法启动连接后,将其放在右边帕蒂斯的一些小事:状态:mysql服务器默认为1你的洞应用程序是utf8连接没有任何额外的(so:latin1)(没有集合名utf8…,没有集合\u charset()方法/函数)只要mysql能够处理字符,存储和读取数据就没有问题。如果你查看数据库,你会发现里面有垃圾(例如使用phpmyadmin)。直到现在这还不是问题(错误,但经常(在欧洲)起作用。。..除非另一个正常工作的客户机/程序或更改的库将读取/保存数据。那你就有大麻烦了!
bmp9r5qi8#
此查询应在创建或更新数据库中数据的查询之前写入,此查询如下所示:
mysql_query("set names 'utf8'");
请注意,您应该在头中编写您正在使用的编码,例如,如果您正在使用utf-8,您可以这样将其添加到头中,否则会导致internetexplorer出现问题所以你的页面看起来像这样
<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>
8条答案
按热度按时间2nbm6dog1#
根据手册:
set names指示客户端将使用哪个字符集向服务器发送sql语句。
更细致地说(再一次,从手册中无缘无故地提出来):
set names指示客户端将使用哪个字符集向服务器发送sql语句。因此,集合名称“cp1251”告诉服务器,“来自此客户机的未来传入消息位于字符集cp1251中。”它还指定服务器应用于将结果发送回客户机的字符集(例如,如果使用select语句,它将指示要用于列值的字符集。)
yqlxgs2m2#
解决办法是
63lcw9qa3#
正确编码真的很棘手-层太多了:
浏览器
页码
PHP
mysql数据库
php中的sql命令“set charset utf8”将确保客户端(php)将以utf8格式获取数据,无论这些数据如何存储在数据库中。当然,它们首先需要正确存储。
ddl定义与真实数据
为表/列定义的编码实际上并不意味着数据采用该编码。如果碰巧有一个表定义为
utf8
但是存储为不同的编码,那么mysql将把它们当作utf8
你有麻烦了。这意味着你必须先解决这个问题。要检查的内容
您需要检查每个层的数据流编码是什么。
检查http头,头。
检查请求正文中真正发送的内容。
别忘了mysql几乎无处不在:
数据库
table
柱
整个服务器
客户
确保每个地方都有合适的。
转换
如果您收到数据,例如。
windows-1250
,并希望存储在utf-8
,然后在存储之前使用此sql:如果数据库中有数据
windows-1250
想重新获得utf8
,使用:其他注意事项:
不要依赖太“聪明”的工具来显示数据。e、 phpmyadmin(在我使用它的时候)编码非常糟糕。它穿过了所有的层所以很难找到。
另外,InternetExplorer有一种非常愚蠢的行为,即根据奇怪的规则“猜测”编码。
使用可以切换编码的简单编辑器。我推荐mysql workbench。
2vuwiymt4#
使用php函数mysqli::set\u charset mysqli\u set\u charset,而不是通过sql查询执行此操作
有关更多信息,请参阅mysql字符集概念部分。
从http://www.php.net/manual/en/mysqli.set-charset.php
ff29svar5#
每当您想向服务器发送数据时,需要使用纯ascii无法表示的字符,如'ñ' 或'ö'.
如果mysql示例没有配置为在默认情况下从客户机连接期望utf-8编码(根据您的位置和平台,很多都是这样)
阅读http://www.joelonsoftware.com/articles/unicode.html 以防您不知道unicode是如何工作的。
阅读是否使用“集合名称”来查看集合名称替代方案,以及它到底是关于什么的。
gwbalxhn6#
不仅仅是pdo。如果sql的回答像“????”符号,您的预设字符集(希望utf-8)真的建议:
或通过程序方式
mysqli_set_charset($db,"utf8")
6bc51xsx7#
谢谢大家!
不使用:query(“set names utf8”);这是安装程序,不是查询。用setcharset()或类似的方法启动连接后,将其放在右边
帕蒂斯的一些小事:
状态:
mysql服务器默认为1
你的洞应用程序是utf8
连接没有任何额外的(so:latin1)(没有集合名utf8…,没有集合\u charset()方法/函数)
只要mysql能够处理字符,存储和读取数据就没有问题。如果你查看数据库,你会发现里面有垃圾(例如使用phpmyadmin)。
直到现在这还不是问题(错误,但经常(在欧洲)起作用。。
..除非另一个正常工作的客户机/程序或更改的库将读取/保存数据。那你就有大麻烦了!
bmp9r5qi8#
此查询应在创建或更新数据库中数据的查询之前写入,此查询如下所示:
请注意,您应该在头中编写您正在使用的编码,例如,如果您正在使用utf-8,您可以这样将其添加到头中,否则会导致internetexplorer出现问题
所以你的页面看起来像这样