在MySQL中设置名称UTF 8?

在MySQL中设置名称UTF 8?

我经常在使用MySQL的PHP脚本中看到类似于此的内容

query("SET NAMES utf8");

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

  1. 这是只对PDO做的事情吗?
  2. 如果不是PDO特定的事情,那么做它的目的是什么?我意识到它正在为MySQL设置编码,但我的意思是,我从未使用过它,所以我为什么要使用它呢?


翻阅古今
浏览 459回答 3
3回答

繁花不似锦

从手册:集合名称指示客户端将使用哪个字符集向服务器发送SQL语句。(再一次,又一次无缘无故地从手册):集合名称指示客户端将使用哪个字符集向服务器发送SQL语句。因此,SET名称‘cp 1251’告诉服务器,“来自此客户端的未来传入消息位于字符集cp 1251中。它还指定服务器用于将结果发送回客户端的字符集。(例如,它指示如果使用SELECT语句,列值将使用哪个字符集。)

蝴蝶刀刀

正确的编码是非常棘手的-有太多的层:浏览器页PHPMySQL来自PHP的SQL命令“set charset UTF 8”将确保客户端(PHP)将获取UTF 8中的数据,无论它们如何存储在数据库中。当然,首先需要正确地存储它们。DDL定义与实际数据为表/列定义的编码并不意味着数据在这种编码中。如果碰巧有一个表定义为utf8但是存储为不同的编码,那么mysql将把它们当作utf8你现在有麻烦了。这意味着你必须先解决这个问题。检查什么您需要检查每一层的数据流编码内容。检查HTTP头、标头。检查请求正文中实际发送的内容。不要忘记MySQL几乎在任何地方都有编码:数据库表柱服务器作为一个整体客户确保到处都是对的。转换如果你收到的数据。windows-1250,并想要存储在utf-8,然后在存储之前使用此SQL:SET NAMES 'cp1250';如果在DB中有数据作为windows-1250想退却utf8,使用:SET CHARSET 'utf8';很少有更多的注释:不要依赖过于“聪明”的工具来显示数据。例如,phpMyAdmin(当我使用它的时候)编码非常糟糕。它穿过所有的层,所以很难找出。此外,InternetExplorer还存在基于奇怪规则的“猜测”编码的愚蠢行为。在可以切换编码的地方使用简单的编辑器。我推荐MySQLWorkbench。
打开App,查看更多内容
随时随地看视频慕课网APP