在Centos7 中PHP与SQL Server链接出现的编码问题
项目一直处于Windows平台,变更到linux上移植的时候发现了一个严重的字符编码问题。
服务器情况如下
数据服务器Windows 2016 + SQLServer 2008R2
原Web服务器Windows 2016 自带IIS10 + PHP5.4
新Web服务器Centos7
大家都知道SQLServer 安装时候的默认有一项排序规则是Chinese_PRC_CI_AS
Chinese_PRC:是指中国大陆的简体字UNICODE的排序规则。
CI:CaseSensitivity,指定不区分大小写。
AS:AccentSensitivity,指定区分重音。
在SQLServer中并没有独立的字符编码选项,所以一切与编码有关的内容都在排序规则中,在我们使用Chinese_PRC_CI_AS时
varchar类型时 存到表里的数据是GBK编码
nvarchar类型是 存储的是UTF-16编码 (包括emoji表情)
更过关于SQLServer字符编码、排序规则的内容不在此赘述,自行搜索。
综上我们的php使用了UTF8编码,所以对SQLServer读写封装了转码操作。
在Linux中安装SQLServer驱动后用移植的项目运行后出现了乱码问题!同样的代码在Centos7中怎么就乱码了呢?
去掉转码所有读写就都正常了,但是UTF8页面与GBK数据库表的读写竟然不需要转换编码就可以正常读写很不可思议。
为了这个搞清楚出现问题花了一天的时间研究整个安装过程并没有找到可以改变字符编码的配置文件,最后查阅了Microsoft文档,发现SQLServer驱动遵循了Centos的系统语言配置。
也就是/etc/locale.conf中的设置,调整后可以使Centos7的SQLServer操作与Windows保持一致。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码