php - php 应用程序和 ms sql server 中的区域字符(抛光)问题

标签 php sql-server sql-server-2005 unicode

我在将区域字符串字符插入 MS SQL Server 数据库时遇到问题。

有一个 PHP 应用程序与 mssql 服务器连接并插入一些数据。但不是插入诸如:ą、Ą、ć、Ł、ź(等等 - 顺便说一句。这些是波兰地区字符)之类的字符,而是在插入到 mssql 表中时,它们显示为 a 、A、c、L、z。

这是一些背景:

  • 我使用 freetds 驱动程序进行 mssql 连接
  • 列类型为 nvarchar(MAX)
  • 我查看了“通过线”(使用 WireShark)发送的数据,UTF-8 编码的数据看起来没问题,例如 Ą 作为 U+0104 发送。
  • 将相同的字符串插入本地数据库实例(Microsoft SQL Server Express 版)时,它工作正常,但在远程主机(在客户位置 - 它是 Microsoft SQL Server 标准版 64 位)上,会发生这种“去区域化”。

这个远程 mssql 服务器似乎无法正确处理 php 应用程序发送的输入数据。谁能看到/知道这里出了什么问题吗?

最佳答案

也许是个菜鸟错误,但我根据KB #239530找到了这个问题的根源:

"When SQL Server converts a Unicode string without the N prefix from Unicode to the SQL Server database's code page, any characters in the Unicode string that do not exist in the SQL Server code page will be lost."

我认为 sqlserver 的本地实例以某种方式将所有传入的字符串文字视为 Unicode 字符串,而远程服务器则不然,因此需要 N 前缀。

关于php - php 应用程序和 ms sql server 中的区域字符(抛光)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719436/

相关文章:

sql-server - SQL Server 导入向导失败并显示难以理解的消息

sql - 选择所有不在Top 'n'中的数据为 'Other'

php - 复选框或下拉筛选结果

c# - 如何从不在默认 DBO 架构中的 SQL Server 数据库表中读取数据

sql - 如何从包含自引用外键的表中删除数据

sql-server - 使用 powershell 部署数据库项目 (.dbproj)

sql-server-2005 - 如何创建 SQL Server 2005 数据库的实时副本?

php - 当我关闭错误报告时,PHP 在非必要操作失败后仍然会杀死我的脚本

php - MySQL/PHP - 需要能够生成具有比其他权重更大的某些列的查询结果

javascript - 用php添加Javascript