我有一个laravel 4.2
项目,我在数据库中有一个utf8
字段,但数据存储在这个文件中的方式就像را
字符。
在任何 php 文件(laravel 除外)中选择数据后,这些字符在使用后以正确的方式呈现(设置名称 'utf8')。 我想在拉拉维尔做同样的事情。(即使不是数据库解决方案)
这是我尝试过的:
- 确保所有文件都
utf8
- 确保在配置文件中
utf8
字符集和排序规则 - 在配置文件中使用
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
我也尝试使用Blade::setEchoFormat('e(utf8_encode(%s))');
但不知道如何以正确的方式使用它。
任何帮助将不胜感激。
不要使用 iconv。 请勿使用utf8_encode。
你有莫吉巴克。
你期待的是را
而不是را
吗? 这是表中的十六进制吗:D8B1D8A7
?
这是经典案例
- 客户端中的字节以 utf8(良好)正确编码。
- 您可能默认连接了
SET NAMES latin1
(或set_charset('latin1')
或...)。 (应该utf8
。 - 表中的列可能
CHARACTER SET utf8
也可能没有,但应该是这样。
如果您需要修复数据,则需要"2 步 ALTER",例如
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中长度足够大,另一个"..."有其他任何东西(NOT NULL
等)已经在列上。
这是我如何让它工作:
我的问题与我的想法相反.
我所做的只是从数据库.php配置文件和注释中删除 UTF8 设置第 $connection->准备($names)->执行();在 MysqlConnector.php 文件中
并显示正确的单词谢谢大家,如果有人知道更好的解决方案,请与我分享。
CHARACTER SET 设置为 utf8,将 COLLATE 设置为 utf8_general_ci 数据库、表和列。
ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table_name MODIFY column_name column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;