首页 > 解决方案 > 我什么时候必须使用'set names utf8'

问题描述

我可以访问不同 PC 上的两个 MYSQL 服务器并进行以下实验。

运行以下sql创建数据库和表并插入一条中文记录。

drop database IF EXISTS test;
create database test charset utf8;
use test;
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `name` varchar(256) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES ('中文');

执行以下 PHP 代码查询记录。

<?php
$mysql = new mysqli('192.168.1.100', 'root', '', 'test');// Server A
$mysql->query("SET NAMES utf8");
$p = $mysql->query("select * from test");
var_dump($p->fetch_all(1));


$mysql = new mysqli('192.168.1.101', 'root', '', 'test');// Server B
$mysql->query("SET NAMES utf8");
$p = $mysql->query("select * from test");
var_dump($p->fetch_all(1));

结果是:

array(1) {
  [0]=>
  array(1) {
    ["name"]=>
    string(14) "中文"
  }
}
array(1) {
  [0]=>
  array(1) {
    ["name"]=>
    string(6) "中文"
  }
}

显然,来自服务器 A 的结果格式很奇怪。

如果我$mysql->query("SET NAMES utf8");在 Server A 上评论代码,结果是正确的。

$mysql->query("SET NAMES utf8");如果我在 Server B 上注释代码,则结果不正确。

set names utf8一个关键点也是如此。我不知道这两个 MYSQL 服务器之间的区别。

但我想知道我什么时候必须使用 'set names utf8' ?任何帮助是极大的赞赏。

标签: phpmysqlutf-8

解决方案


推荐阅读