You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP连接Oracle US7ASCII字符集时韩文显示乱码问题咨询

PHP连接Oracle时US7ASCII字符集导致韩文乱码的问题解决

问题原因

说白了,US7ASCII字符集根本不支持韩文!它是仅包含ASCII字符(0-127号编码)的单字节字符集,而韩文属于多字节的Unicode字符,完全不在它的覆盖范围内。当你用US7ASCII作为连接字符集时,Oracle会尝试把数据库中的韩文字符转换为US7ASCII编码——但转不了啊,所以只能用问号?替代那些无法识别的字符,最终返回的JSON里就全是乱码了。

解决方法

按照下面的步骤来,很快就能搞定:

  • 第一步:确认Oracle数据库的字符集
    先查一下你的Oracle数据库实际用的是什么字符集,推荐用支持全Unicode的AL32UTF8(现在大部分Oracle数据库默认都是这个)。执行这条SQL语句就能查到:

    SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
    
  • 第二步:修改连接字符串的字符集
    把连接时指定的字符集改成和数据库一致的,比如数据库用的是AL32UTF8,那连接代码就改成:

    $link = oci_connect("test", "test", "//localhost/xe",'AL32UTF8');
    

    AL32UTF8是Oracle对UTF-8的实现,完美支持韩文等所有Unicode字符,这样数据在传输过程中就不会被截断或替换了。

  • 第三步:确保PHP输出JSON的编码正确
    输出JSON的时候,一定要设置正确的响应头,告诉客户端这是UTF-8编码的内容,避免客户端解析时再次乱码:

    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($your_data);
    
  • 额外提醒
    如果你的数据库字符集不是AL32UTF8这类支持韩文的编码,那可能需要考虑迁移数据库字符集(这个操作要谨慎,最好先备份数据),不过现在新安装的Oracle基本都是默认支持Unicode的,所以大概率前面两步就够了。

内容的提问来源于stack exchange,提问作者Suraj Monde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:27