Laravel:如何在MySql数据库中存储印地语字符

时间:2019-03-14 18:32:34

标签: mysql database laravel utf-8

我想使用laravel应用程序将印地语字符存储在mysql数据库中

我具有数据库的以下属性

 Database charset = utf8
 Database collation = utf8_general_ci

以及使用 config / database.php

的这些设置
 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'db'),
        'username' => env('DB_USERNAME', 'user'),
        'password' => env('DB_PASSWORD', 'password'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

但是当我尝试存储数据时,它给了我这个错误

"message": "SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' (SQL: select * from `col` where (`name` = \u091b\u0924\u094d\u0924\u094b\u0917) limit 1)",
"exception": "Illuminate\\Database\\QueryException",

请给我一些建议,我不明白我在想什么

2 个答案:

答案 0 :(得分:1)

如错误消息所提示,latin1出现在某处。这可能是客户端的默认设置。

您的config / database.php看起来不错。因此,让我们以另一种方式解决它:

连接后,立即执行SQL命令SET NAMES utf8

我无法确定\u091b\u0924\u094d\u0924\u094b\u0917的来源,但是您应该在客户端中真正使用UTF-8编码,而不是等价的Unicode。

答案 1 :(得分:0)

我正在为数据库和表设置Charset utf8 和排序规则 utf8_general_ci 但是我们需要检查表列是否具有相同的字符集和排序规则,我是否丢失了相同的字符,或者我对此不了解:)

enter image description here