如何解决Summernote存入Unicode字符到数据库显示???的问题
解决Summernote存入Unicode字符显示为“???”的问题
确认数据库字段的Unicode支持
虽然数据库排序规则是latin_general_bin2,但字段的字符集必须支持Unicode存储:- 若使用SQL Server,将字段类型改为
nvarchar(推荐,替代ntext),latin_general_bin2排序规则可搭配nvarchar使用,不影响Unicode存储。 - 若使用MySQL,将字段字符集改为
utf8mb4,排序规则可保留latin_general_bin2或对应utf8mb4的排序规则。
- 若使用SQL Server,将字段类型改为
强制数据库连接使用UTF-8编码
应用程序与数据库建立连接时,必须明确指定UTF-8编码,避免编码转换丢失字符:- PHP示例:
mysqli_set_charset($conn, 'utf8mb4'); - .NET示例:连接字符串添加
Unicode=true;charset=utf8 - Java示例:数据库URL添加
useUnicode=true&characterEncoding=utf8
- PHP示例:
确保前端提交编码正确
- 页面头部添加
<meta charset="UTF-8">,保证页面本身编码为UTF-8。 - 表单标签添加
accept-charset="UTF-8",明确表单提交时使用UTF-8编码传输数据。
- 页面头部添加
检查Summernote配置与后端接收逻辑
- Summernote默认保留UTF-8编码字符,无需额外配置,避免手动对内容做编码转换操作。
- 后端接收数据时,直接使用原始UTF-8数据存入数据库,不要进行非UTF-8的转码(比如不要用
iconv转成latin1)。
排查验证步骤
绕过Summernote,直接在后端代码中插入测试Unicode字符(如“សួស្តី”)到数据库:- 若存入后正常显示,说明问题出在前端提交或Summernote处理环节,重点检查表单编码和Summernote配置。
- 若仍然显示“???”,说明数据库字段或连接编码存在问题,回到前两步排查。
内容的提问来源于stack exchange,提问作者Slack_ny
相关产品推荐
相关产品推荐

