php - Laravel 5.8 尝试从数据库中查询阿拉伯语记录

标签 php mysql pdo laravel-5.8 laravel-query-builder

我正在尝试查询一些阿拉伯语记录,这些记录是我之前通过 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/

相关文章:

php - 无法从映射文件生成 zf2 DoctrineORMModule 实体

php - 如何将 2 个字符串插入到数据库的 1 列中? (代码点火器)

mysql - 将存储在 mysql 字段中的正则表达式字符串用于 Rails 项目

php - 错误 session_start() : open(/var/lib/php/session error

php mysql select结果在两个日期之间没有记录

mysql - SQL。我需要根据日期连接两行

PHP PDO 返回空列名

php - 在 Mac OSX 上启用 PHP pdo_odbc 扩展

php - 多次使用绑定(bind)参数

php - 为 JSON API 引用从 MySQL 返回的 PHP 数组