PHP + MS SQL Server 字符编码

Posted

技术标签:

【中文标题】PHP + MS SQL Server 字符编码【英文标题】:PHP + MS SQL Server character coding 【发布时间】:2016-02-04 03:59:35 【问题描述】:

我的 Ubuntu Linux 服务器上有一个 Codeigniter 项目。 我不使用 mysql,因为我正在连接 Microsoft SQL 2014 Express Server。 (我在我的 Linux 服务器上使用 FreeTDS) FreeTDS 工作正常,我可以连接 MS SQL 服务器,但字符编码有问题。 我在我的 MS SQL 服务器中使用 Hungarian_CI_AS 归类,在 FreeTDS(客户端字符集 = UTF-8)和 Codigniter 上使用 UTF-8。

问题:我有 MS SQL 字段内容:Igazgatósági előterjesztések 这在 SQL 查询后显示:Igazgat�s�gi el?terjeszt�sek (它不显示匈牙利字符 ó、á、ő、é 等) 我认为这是 UTF-8 问题。我寻找这个问题,但我没有找到任何好的提示。我试过 ini_set('mssql.charset', 'UTF-8');在 php.ini 上,但这不起作用。 我尝试在查询后转换字符串。示例:UTF-8 到 ISO8859-1 和 UCS2 到 UTF-8 和 UCS2 到 ISO8859-1 等。 í, ó, ú, é 字符有效但 ő 字符无效时的最佳结果。

解决办法是什么? MS SQL Server 使用哪种字符编码? 如何转换这个字符串才能工作?

【问题讨论】:

UTF-8 all the way through的可能重复 我在哪里可以复制 UTF-8?因为 MS SQL Server 不使用 UTF-8。 @AndreFerraz 那是针对 MySql 而不是 MS SQL。一些更好的链接:***.com/questions/3951722/…,***.com/questions/12512687/sql-server-utf8-howto Karcan 发布了一个 Answer 说“你可以尝试将列更改为 nvarchar 吗?我在使用 laravel 的 ubuntu/mssql 上没有字符集问题。” 可以将数据库服务器升级到 MS SQL 2019 吗?此版本中引入了 UTF-8 支持。 【参考方案1】:

首先,请检查您是否可以键入该字符,因为某些工具(与您的应用程序不同),例如 SQL Server Management Studio,然后将其保存在表中并使用变量创建存储过程,例如,保存,该字符,在这两种情况下,如果您能正确看到该字符,请按照以下步骤操作:

为特殊字符添加一些标识符以替换您的应用程序以来的特殊字符,例如,如果您需要将“o”保存为双锐角,请替换为“_1”(认为一个更好的主意:P 作为标识符)。 编写一个存储过程,用双尖音符再次替换那个“o”的那个“_1”,但是从 SQL Server 开始,您可以直接在存储过程的代码中写入该字符。

这是一个有点肮脏的工作,取决于您是否可以将该字符直接键入 SQL Server。我以前也遇到过这样的问题,我不记得确切的最终解决方案,但我记得这个让我继续努力寻找最终解决方案的技巧。

另外:您是否检查了存储字符的列的类型?无论如何,开始尝试在开始时请求的那个。

【讨论】:

以上是关于PHP + MS SQL Server 字符编码的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL SERVER、PHP、PDO、ODBC:用户登录失败

按字母数字字符串 MS SQL Server 2012 中的相似性排序

使用编码字的 MIME 标头中的换行符是不是合法?

将 php 连接到 MS SQL Server 2008

检索插入记录的 ID:Php & MS SQL SERVER

UTF-8 字符在 MS-SQL-Server 上的 INSERT 语句中发生更改