php - 我什么时候必须使用'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' ?任何帮助是极大的赞赏。
解决方案
推荐阅读
- java - 如何强制 Spark 创建度量 sink.csv.directory?
- ios - Swift Keychain 无法从 viewDidLoad 中检索保存的密码以实现自动登录功能
- c# - 带有 SQL 传输的 NService 总线
- java - 如何修复 apache felix 中的已解决状态?
- javascript - 如何 document.querySelectAll 内联 CSS 样式?
- eclipse - 如何在 Eclipse RCP 应用程序中使用 mylyn 通知扩展?
- javascript - 复选框在映射功能中不起作用反应js css
- xcode - High Sierra 和 Mojave 操作系统
- python-3.x - 分组并计算时间戳的差异
- c - 将随机元素分配给函数中的 int 2D 矩阵时,如何避免 C 中的 SIGSEV 分段错误?