非英语字符是一个头痛的问题,但在过去的几年里,处理它们变得更容易了。首先,确保数据库中的varchar和文本列排序规则设置为
utf8mb4_unicode_ci
.
然后,您需要确保在查询数据库时,使用的是utf8。在从PHP连接到MySQL服务器之后,但在运行任何其他查询之前,请运行以下查询:
SET NAMES utf8mb4;
最后,确保显示文本的页面也已准备好UTF8。现在大多数浏览器都是默认的,但为了安全起见,在HTML标题中设置以下标记:
<meta charset="utf-8">
如果您正在使用mysqli,下面的代码片段可能会有所帮助:
# Set up the mysqli driver
$driver = new mysqli_driver();
# Report all errors
$driver->report_mode = MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR;
# Try connecting
try {
$mysqli = new mysqli($_ENV['db_servername'],$_ENV['db_username'], $_ENV['db_password'], $_ENV['db_database']);
}
catch(mysqli_sql_exception $e) {
if ($mysqli->connect_error) {
die("[Error #{$mysqli->connect_errno}] {$mysqli->connect_error}");
} else {
die($e->getMessage());
}
}
# Ensure everything is UTF8mb4
$mysqli->set_charset('utf8mb4');
# Ensure PHP and mySQL time zones are in sync
$offset = (new \DateTime())->format("P");
$mysqli->query("SET time_zone='$offset';");