使用laravel对数据库输出进行错误的字符编码


Wrong character encoding with database output using laravel

我最近开始使用laravel为我正在工作的一个项目,我目前有问题显示数据从我的数据库在正确的字符编码。

我当前的系统由一个单独的脚本组成,该脚本负责用数据填充数据库,而laravel项目负责显示数据。所使用的视图被设置为将所有文本显示为utf-8,因为我已经成功地在视图中打印了特殊字符。数据库中的文本不会以utf8格式打印,也不会以正确的方式打印特殊字符。我试过使用雄辩模型和DB::select(),但它们都显示出同样糟糕的结果。

database.php中的charset设置为utf8, collation设置为utf8_unicode_ci

数据库表:

CREATE TABLE `RssFeedItem` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`feedId` smallint(5) unsigned NOT NULL,
`title` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`text` mediumtext COLLATE utf8_unicode_ci,
`textSha1` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `feedId` (`feedId`),
CONSTRAINT `RssFeedItem_ibfk_1` FOREIGN KEY (`feedId`) REFERENCES `RssFeed` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6370 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我还设置了一个测试页面,以查看问题是否可能是我的数据库设置,但测试页面打印一切都很好。测试页面使用PDO选择所有数据,并将其打印在一个简单的html页面上。

有谁知道问题是什么吗?我试着四处搜索,除了这个链接没有运气,但我没有找到任何可能帮助我的东西。

我最终自己解决了这个问题。这个问题是由负责向数据库填充数据的单独脚本引起的。这个问题可以通过在向数据库插入数据之前使用SET NAMES utf8运行查询来解决。原始数据被提取出来,然后在运行所述查询后发回。

它在laravel之外工作的原因很简单,因为上面所说的查询没有在我的测试页面上执行。如果在检索数据之前运行查询,则会得到错误的编码,因为查询声明数据被编码为utf8,而实际上不是。