2

I'm trying to seed categories in my database. I set the title as unique. However, in french it's spelled catÉgorie.

I try to seed Catégorie 1, Catégorie 2, Catégorie 3. I got an error when I php artisan db:seed because he read it has Cat?gorie 1, Cat?gorie 2, Cat?gorie 3 and that Cat is repeated (therefore not unique).

I've set my db to utf8_general_ci and did the change in config/database.php.

What did I miss here?

4

2 回答 2

1

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

Laravel 4 Config

//file: app/config/database.php

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


播种机文件编码

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


数据整理

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


数据库连接

  • 连接本身应该是 utf8。


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

//file /etc/mysql/my.cnf

[mysqld]
...
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
...
于 2013-11-09T21:16:46.337 回答
0

提示与分析

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

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

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

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

.

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


解决方案

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

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

于 2014-03-07T09:57:06.413 回答