我正在使用PHP和MySQL建立一个小型网站。
我从数据库中读取时遇到问题。我可以在数据库上执行所有操作,但是当我从数据库SELECT
Č Ć Ž Đ Š
时,我得到一些无效或错误表示的字符。
我得到:
但是在数据库中,我看到了:
KoristećikriminalističkupričuDostojevski je sastavio罗马kojim jepredočiosvusloženostu odnosu pojedinca premapostojećimzakonima。
问题在于克罗地亚字母:collation
。我认为问题出在数据库helm list
上。
有什么想法吗?
答案 0 :(得分:2)
非英语字符令人头疼,但是在过去几年中,处理它们变得更加容易。首先,请确保数据库中的varchar和text列归类设置为 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';");