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

如何使用PHP及mssql_connect向SQL Server插入emoji?

问题根因

你使用的mssql扩展(对应mssql_connect驱动)本身存在底层编码限制:该扩展仅支持UCS-2编码,无法处理UTF-8的4字节字符(所有emoji都属于4字节Unicode字符),你已经设置的mssql.charset = "UTF-8"配置无法解决这个底层缺陷。传输过程中emoji会被截断为乱码,直接破坏了原SQL语句的引号闭合结构,因此才会返回Incorrect syntax near ''的语法错误。你在SQL Server客户端执行相同语句正常,是因为客户端的编码传输链路完整支持4字节Unicode,不存在字符截断问题。

解决方案
  • 方案1(长期最优):替换驱动为微软官方推出的sqlsrv扩展,该扩展完美支持UTF-8 4字节字符,兼容PHP 5.6和SQL Server 2016版本。连接时明确指定字符集为UTF-8即可,示例代码如下:
    $server = "你的数据库服务地址";
    $connParams = [
        "Database" => "你的数据库名",
        "UID" => "数据库账号",
        "PWD" => "数据库密码",
        "CharacterSet" => "UTF-8"
    ];
    $conn = sqlsrv_connect($server, $connParams);
    
    连接成功后直接执行原有带N前缀的插入语句即可正常写入emoji到NVARCHAR(MAX)字段。
  • 方案2(临时应急,不推荐长期使用):如果暂时无法更换驱动,可以先把要插入的字符串中的emoji转义为HTML实体后再执行插入,读取时再做反转义处理,示例代码如下:
    $content = htmlentities('📅 example', ENT_QUOTES, 'UTF-8');
    $sql = "INSERT INTO [table] (text) VALUES (N'$content')";
    
    该方案的缺点是数据库中存储的是转义后的实体内容,模糊查询、排序等操作都会受影响,仅适合临时过渡使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:05