为了账号安全,请及时绑定邮箱和手机立即绑定

在MySQL中设置名称UTF 8?

在MySQL中设置名称UTF 8?

翻阅古今 2019-07-05 13:42:35
在MySQL中设置名称UTF 8?我经常在使用MySQL的PHP脚本中看到类似于此的内容query("SET NAMES utf8");我从来没有做过这样的任何项目,所以我有几个基本的问题。这是只对PDO做的事情吗?如果不是PDO特定的事情,那么做它的目的是什么?我意识到它正在为MySQL设置编码,但我的意思是,我从未使用过它,所以我为什么要使用它呢?
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

手册:

集合名称指示客户端将使用哪个字符集向服务器发送SQL语句。

(再一次,又一次无缘无故地从手册):

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


查看完整回答
反对 回复 2019-07-05
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

正确的编码是非常棘手的-有太多的层:

  • 浏览器
  • PHP
  • MySQL

来自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。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 455 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信