我正在尝试查询一些阿拉伯语记录,这些记录是我之前通过 PDO 的 DB Facade 插入的。当我第一次插入这些记录时,我注意到所有内容都已成功插入,但我看不到来自 Blade View 文件的阿拉伯文本。所以我检查了代码,一切都很好,然后我检查了数据库本身(使用 TablePlus),令人惊讶地发现阿拉伯文本也成功插入。
接下来,我检查了位于 Config/Database.php 中的数据库字符集,发现它设置为 utf8mb4 并且排序规则为 utf8mb4_unicode_ci,所以这意味着阿拉伯语不应该成为问题(我什至尝试将其切换为只有 utf8 但没有运气)。
我去检查查询本身,发现没有任何问题,但出于礼貌,我想在执行插入查询之前添加“SET NAMES UTF8”,这是最奇怪的事情......它显示了插入后重定向到 View 时的阿拉伯文本。所以我想我只需要在选择之前输入“SET NAMES UTF8”,但是当我这样做时,当我刷新 View 时它没有显示阿拉伯文本。
文件: 1 个 Controller : 它有 2 个操作,第一个是查询并将结果传递给 View ,另一个是插入然后执行相同的查询以重定向到包含结果的 View 。
1 Blade View : 有一个表单用于导入包含数据的文件和一个显示结果的表格。我使用相同的 Blade View 只是为了显示结果(如果有新文件要插入)。
代码:
插入数据的代码:
DB::table('workers')->insert($data);
$pdo = DB::getPdo();
$statement = $pdo->prepare("set names utf8");
$statement = $pdo->prepare('select * from workers');
$statement->setFetchMode(\PDO::FETCH_ASSOC);
$statement->execute();
$results = $statement->fetchAll();
return view('payslips')->with('data', $results);
执行此代码后,我执行了dd($results)
,我可以看到包括阿拉伯文本在内的所有数据,并且 View 显示了所有内容。
当我刷新页面时执行以下代码:
$pdo = DB::getPdo();
$statement = $pdo->prepare("set names utf8");
$statement = $pdo->prepare('select * from workers');
$statement->setFetchMode(\PDO::FETCH_ASSOC);
$statement->execute();
$results = $statement->fetchAll();
return view('payslips')->with('data', $results);
阿拉伯文本再次消失。即使当我 dd($results)
时,我什至看不到查询结果中的阿拉伯文本。
在我的 Blade View 中,我使用此格式 {{ $data['name'] }}
来查看表中的记录。
我尝试了前面提到的步骤,还尝试在 HTML 和其他地方添加 UTF8,以确保这不是问题,但没有任何改变。我尝试静态渲染阿拉伯文本,它完全没有显示任何问题。
我也去了
/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php
并使用设置名称 utf8 注入(inject) PDO 启动代码,认为这可能会解决问题。
if (! empty($config['database'])) {
$connection->exec("use `{$config['database']}`;");
$connection->exec("set names utf8");
}
对我来说,似乎我应该对数据库查询或配置或其他东西做一些事情,但我真的不知道它是什么。这对我来说是一个非常奇怪的问题,我真的需要你们专业的解决方案。
最佳答案
用于广泛语言支持的最佳编码
character set = utf8mb4
character collation = utf8mb4_unicode_ci
对于 Windows 阿拉伯语:
cp1256 (Windows Arabic) collations:
cp1256_bin
cp1256_general_ci (default)
https://dev.mysql.com/doc/refman/8.0/en/charset-se-me-sets.html
关于php - Laravel 5.8 尝试从数据库中查询阿拉伯语记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573476/