我正在使用 laravel 4。
在迁移过程中,我将行插入到我创建的表中。
例子:
Schema::create('month', function(Blueprint $table)
{
$table->integer('id');
$table->string('name');
});
DB::table('month')->insert(
array(
array(
'id' => 1,
'name' => 'Janeiro'
),
array(
'id' => 2,
'name' => 'Fevereiro'
),
array(
'id' => 3,
'name' => 'Março'
),
array(
'id' => 4,
'name' => 'Abril'
),
array(
'id' => 5,
'name' => 'Maio'
),
array(
'id' => 2,
'name' => 'Junho'
),
array(
'id' => 7,
'name' => 'Julho'
),
array(
'id' => 8,
'name' => 'Agosto'
),
array(
'id' => 9,
'name' => 'Setembro'
),
array(
'id' => 10,
'name' => 'Outubro'
),
array(
'id' => 11,
'name' => 'Novembro'
),
array(
'id' => 12,
'name' => 'Dezembro'
),
));
问题是第 3 个月,Março 被插入为“Mar”,而不是应有的“Março”。
我认为我的 Laravel 数据库配置是正确的:
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'alaviagens',
'username' => 'alaviagens',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
我认为该表是字符集也是正确的:
CREATE TABLE `month` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如果我使用例如 Sequel Pro 更改数据库中的记录本身,我可以将其成功更改为“Março”。
知道可能导致此问题的原因以及如何解决吗?
最佳答案
您的 Laravel 配置和数据库/表整理看起来不错,您必须确保您的迁移/种子 php 文件以 utf8 编码保存。
当然,您的数据库连接也应该以 utf8 运行。 Laravel 应该 provide that by default ,但如果由于任何原因未完成,您应该通过在 mysql 服务器配置中强制执行 utf8 来修复它。
//file /etc/mysql/my.cnf
[mysqld]
...
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
...
编辑:
当您在 OSX 上使用标准 MAMP 时,请遵循以下有关如何更改 mysql 设置的说明。
1) 检查加载的my.cnf配置的位置,在终端运行:
mysql --help | grep cnf
对于 MAMP 2.0,它的结果应该类似于
/etc/my.cnf/etc/mysql/my.cnf/Applications/MAMP/conf/my.cnf ~/.my.cnf
2) 在上面的文件路径之一中创建 my.cnf
并按照我的初始指令进行修改。
如果您使用的是 MAMP PRO,请在 File > Edit Template > MySQL my.cnf
下进行更改。
编辑 2:
如果你的 my.cnf 有问题,你也可以使用一些预定义的模板,MAMP 自带
a) 检查模板的位置
cd /Applications/MAMP/
find . | grep cnf
这将导致
./Library/support-files/my-huge.cnf
./Library/support-files/my-innodb-heavy-4G.cnf
./Library/support-files/my-large.cnf
./Library/support-files/my-medium.cnf
./Library/support-files/my-small.cnf
现在您可以选择上述模板之一并将其复制到 MAMP 目录并轻松修改:
sudo cp /Applications/MAMP/Library/share/mysql/my-medium.cnf /Applications/MAMP/Library/my.cnf
最后一步:
重启 MAMP/MYSQL
关于php - 修复 MAMP 中的 Laravel 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23091878/