可能重复:
一直到 UTF-8
好吧,这很愚蠢,我无法弄清楚。
Mysql 数据库设置为 utf8_general_ci 排序规则。我遇到问题的字段是长文本类型。
添加到数据库的é
字符或其他重音字符返回为 �。
我运行输出stripslashes
,我尝试了有和没有,html_entity_decode
但在输出中找不到任何变化。我究竟做错了什么?
干杯
可能重复:
一直到 UTF-8
好吧,这很愚蠢,我无法弄清楚。
Mysql 数据库设置为 utf8_general_ci 排序规则。我遇到问题的字段是长文本类型。
添加到数据库的é
字符或其他重音字符返回为 �。
我运行输出stripslashes
,我尝试了有和没有,html_entity_decode
但在输出中找不到任何变化。我究竟做错了什么?
干杯
您尝试插入的字符串具有什么字符编码?如果它在 ISO-8859-1 中,您可以使用 PHP 函数 utf8_encode() 将其编码为 UTF-8,然后再将其插入数据库。
正确编码真的很棘手 - 层太多:
PHP 的 SQL 命令“SET CHARSET utf8”将确保客户端 (PHP) 以 utf8 格式获取数据,无论它们如何存储在数据库中。当然,首先需要正确存储它们。
为表/列定义的编码并不真正意味着数据采用该编码。如果您碰巧有一个表定义为utf8
但存储为不同的编码,那么 MySQL 会将它们视为utf8
并且您遇到了麻烦。这意味着你必须先解决这个问题。
您需要检查每一层数据流的编码方式。
如果您在 eg 中接收数据windows-1250
,并希望存储在 中utf-8
,则在存储之前使用此 SQL:
SET NAMES 'cp1250';
如果您在 DB 中有数据windows-1250
并且想要检索utf8
,请使用:
SET CHARSET 'utf8';
不要依赖过于“智能”的工具来显示数据。例如,phpMyAdmin 确实(在我使用它时正在做)编码真的很糟糕。它贯穿所有层,所以很难找出来。此外,Internet Explorer 有非常愚蠢的行为,即根据奇怪的规则“猜测”编码。使用可以切换编码的简单编辑器。另外,我推荐 MySQL Workbench。