【问题标题】:Laravel 4 seeding accentsLaravel 4 播种口音
【发布时间】:2013-08-24 06:30:01
【问题描述】:

我正在尝试在我的数据库中播种类别。我将标题设置为唯一。然而,在法语中,它的拼写是 catÉgorie。

我尝试播种类别 1、类别 2、类别 3。我在php artisan db:seed 时遇到错误,因为他读到它有 Cat?gorie 1、Cat?gorie 2、Cat?gorie 3 并且 Cat 重复(因此没有独一无二)。

我已将我的数据库设置为 utf8_general_ci 并在 config/database.php 中进行了更改。

我错过了什么?

【问题讨论】:

  • 请提供错误和代码。你检查播种机php文件的编码了吗?
  • 您的种子文件是否以 UTF8 格式保存?

标签: mysql laravel laravel-4 seeding


【解决方案1】:

虽然您没有指定,但我假设您使用的是 mysql,并且“类别 1”是其中一个种子表中某些文件的内容。如果您想将 Laravel 与 utf8 mysql 数据一起使用,请记住以下事项:

Laravel 4 配置

//file: app/config/database.php

'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',


种子文件编码

  • 显然,您的所有文件都应使用 utf8 编码保存。


数据整理

  • 数据库排序规则设置为您在上述配置文件中设置的 utf8
  • 表格排序规则是相同的 utf8
  • 这些字段在需要的地方也是 utf8


数据库连接

  • 连接本身应该是 utf8。


关于最后一句话,当然 Laravel 在通过执行 "set names '$charset' collate '$collation'" 建立 mysql 连接时已经处理了这个问题。如果由于某种原因您仍然会遇到问题,请尝试在 mysql 服务器配置 中强制执行 utf8 字符集和排序规则,它最终应该可以解决您的问题:

//file /etc/mysql/my.cnf

[mysqld]
...
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
...

【讨论】:

    【解决方案2】:

    提示与分析

    “Cat?gorie 1”或“Catégory 1”被处理为插入数据库表行列中的普通字符串。

    但是一些现代查询字符串参数是用like来表示的

    query("SELECT something FROM somewhere WHERE condition IN (?)", array('this', 'that'))
    

    如果内容不正确格式化,您的查询编译器可能会丢失。

    .

    另一点是,例如,如果您在 Windows 上使用 Dos 中的 Artisan 命令行,则输出消息提及成功、错误或其他任何内容都不会在您的控制台中正确显示, 因为 UTF-8 不支持 DOS 输出。


    解决方案

    1 .播种机错误可能是正确的,如果记录确实存在,请检查您的数据库。

    2 。如果记录不存在,请附上您的:迁移和种子类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 2013-12-01
      • 2014-05-04
      • 2014-09-05
      • 2015-04-13
      • 2017-06-12
      • 2013-08-21
      相关资源
      最近更新 更多