【问题标题】:Passing data to 2-byte unicode MSSQL database将数据传递到 2 字节 unicode MSSQL 数据库
【发布时间】:2017-11-29 10:04:54
【问题描述】:

我有一个基于 PHP 和 PostgreSQL(基于 Laravel 构建)的 Web 应用程序。 Web 应用程序 PostgreSQL 数据库使用 UTF-8 编码。有一次,我必须将数据传递到托管在另一台服务器上的外部 MS SQL Server 数据库。它可以工作,但是,MS SQL Server 数据库中的文本数据部分混乱且不可读,尤其是在涉及特殊字符的情况下。 MS SQL Server 系统管理员告诉我它使用 2 字节的 Unicode 编码。我想我应该相应地转换。

问题 - 如何在将数据写入 MS SQL Server 数据库之前正确使用此编码和编码数据?

【问题讨论】:

  • 你应该使用nvarchar而不是varchar
  • 在插入时使用 N 进行 unicode 编码。像这样INSERT INTO table (textcolumn1, intcolumn1) VALUES (N'unicodé string', 1)
  • @JacobH,最好使用参数而不是字符串文字
  • @MikhailLobanov 观点没有改变。
  • @Deez 发布您的代码和表定义

标签: php sql-server postgresql unicode encoding


【解决方案1】:

您可以使用mb_convert_encoding更改字符编码:

$message = "Héllo";
$new_message = mb_convert_encoding($message, "UTF-16");

cmets 中给出的示例——INSERT INTO table (textcolumn1, intcolumn1) VALUES (N'unicodé string', 1)——是正确的。不幸的是,没有办法用准备好的语句来做到这一点,例如INSERT INTO table (textcolumn1, intcolumn1) VALUES (N?, ?) 将不起作用。

【讨论】:

    【解决方案2】:

    在尝试了各种编码转换之后,我终于找到了一个适合我的: iconv('UTF-8', 'UCS-2LE', $string);

    张贴以防万一这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多