我最近开始使用laravel来处理我正在进行的项目,而且我目前在使用正确的字符编码显示数据库中的数据时遇到了问题。
我当前的系统由一个单独的脚本组成,该脚本负责用数据填充数据库,而laravel项目负责显示数据。使用的视图设置为将所有文本显示为utf-8,这与我在视图中成功打印特殊字符的方式相同。数据库中的文本不会打印为utf8,也不会以正确的方式打印特殊字符。我尝试过使用雄辩的模型和DB :: select(),但它们都表现出同样糟糕的结果。
如果charset
设置为utf8
,则database.php中的 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页面上。
有谁知道问题可能是什么?除了this link之外,我一直试着没有运气,但我找不到任何可能对我有帮助的东西。
答案 0 :(得分:0)
我最终自己最终解决了这个问题。问题是由负责用数据填充数据库的单独脚本引起的。在将数据插入数据库之前,通过使用SET NAMES utf8
运行查询来解决此问题。原始数据被拉出,然后在运行所述查询后发回。
它在laravel之外工作的原因,仅仅是因为我的测试页面上没有执行上述查询。如果我在检索数据之前运行查询,它会出现错误的编码,因为查询表明数据编码为utf8,而实际上并非如此。