【问题标题】:Wrong collation creates invalid markers laravel错误的排序规则会创建无效的标记 laravel
【发布时间】:2020-01-22 09:10:36
【问题描述】:

所以我正在我的 localhost 中开发一个 laravel 应用程序,这是一台 Windows 笔记本电脑,但我的应用程序服务器位于 linux 服务器中。 当我在文本区域中开发和保存一些带有特殊字符的随机文本时,如“Ç~º”,一切都很好地保存在数据库中并显示在浏览器中。问题出在服务器(linux)中,它会创建特殊字符,例如“pátio nº 64/2”,并在浏览器中显示错误。

我尝试将 config/database.php 文件中的排序规则更改为与 db 相同(我们使用葡萄牙语排序规则)'collat​​ion' => 'Latin1_General_CI_AS' 和 charset =>'utf8' 但没有任何改变。

有什么想法吗?我正在使用 sql server 数据库 如果我将字符集更改为 latin1 而不是 utf8,服务器会显示错误

PDOException in Connector.php line 55
SQLSTATE [] (null) (severity o)

在保存到数据库之前,我也尝试过使用 html 解码实体,但没有奏效。 在这个问题上我真的需要一些帮助......

【问题讨论】:

  • 这能回答你的问题吗? UTF-8 all the way through
  • 我已经尝试了大部分答案,但到目前为止什么都没有......

标签: php sql-server laravel laravel-5


【解决方案1】:

您必须更改 collate 和 charset。如果您能够通过config/database.php 设置collate 和charset,那么您可以这样做(对于mysql):

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

但如果您不想更改数据库排序规则,那么您可以选择仅更改特定表的排序规则和字符集。为此,请使用以下查询:

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

【讨论】:

  • 前两个更改在 Connector.php 第 55 行 SQLSTATE [] (null) (严重性 o) 中引发错误 PDOException
  • ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; “关键字‘CONVERT’附近的语法不正确。”我的表是 WFQ_Acoes
  • 您是否将your_table_name 替换为您的表名?
  • yes ALTER TABLE WFQ_Acoes CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • mysql版本是多少?
【解决方案2】:

在我的控制器中,我在保存之前使用过这个,

$var = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $request->input ('input1' ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2014-08-15
    • 2021-02-11
    • 2018-02-08
    相关资源
    最近更新 更多