Yhi*_*lan 7 php mysql cjk utf8mb4
这可能很简单.我发誓我一直在网上寻找答案而没有找到答案.由于我的特殊情况有点不典型,我终于决定在这里问.
我在MySQL中有一些表用于中文程序.它需要能够支持所有可能的汉字,包括没有很好字体支持的稀有字符.表中的示例单元格可能是这样的:
东菄鸫䍶倲涷蝀冻鯟崠埬䰤
为了使其在数据库中正常工作,我必须将编码/校对设置为utf8mb4.到现在为止还挺好.不幸的是,当我将相同的字符串拉入PHP时,它将被打印为:
东菄鸫䍶?倲??涷蝀冻鯟?崠埬?䰤
我怎么能最终杀掉剩下的问号并让它们显示为unicode字形呢?我已经在标签中使用UTF8编码并将其作为元标记获得了php页面.
为什么他们不能互相沟通?我究竟做错了什么?
dec*_*eze 15
我只是猜测你正在设置表utf8mb4,但你的连接编码设置为utf8.你必须将它设置utf8mb4为,否则MySQL将转换存储的utf8mb4数据utf8,后者不能编码"高"Unicode字符.(是的,那是MySQL的特质.)
在原始MySQL连接上,它必须如下所示:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Run Code Online (Sandbox Code Playgroud)
根据您从PHP(mysql,mysqli或PDO)连接到MySQL的方式,您必须根据客户端的最佳方式进行调整.
要真正澄清(是的,mysql_为了简单起见使用扩展,不要在家里这样做):
mysql_connect(...);
mysql_select_db(...);
mysql_set_charset('utf8mb4'); // adapt to your mysql connector of choice
$r = mysql_query('SELECT * FROM `my_table`');
var_dump(mysql_fetch_assoc($r)); // data will be UTF8 encoded
Run Code Online (Sandbox Code Playgroud)