如何通过PHP将Unicode数据更新到SQL Server?

3
我使用sqlsrv驱动程序通过PHP连接Microsoft SQL Sever 2008 R2。但是,当我尝试使用更新语句更新信息时,它不起作用。似乎我不能使用非英文单词(例如中文)更新信息。因此数据库没有更新。
它已经起作用。
$query="UPDATE [Management].[dbo].[Employee]
   SET [Management].[dbo].[Employee].[name] = 'abc'
 WHERE [Management].[dbo].[Employee].[EmpID]=1;";
$stmt=sqlsrv_query( $conn, $query);

它不起作用。

$query="UPDATE [Management].[dbo].[Employee]
   SET [Management].[dbo].[Employee].[name] = '你好'
 WHERE [Management].[dbo].[Employee].[EmpID]=1;";
$stmt=sqlsrv_query( $conn, $query);

我找到了解决方案!完整的解决方案是确保你的列数据类型为“NVARCHAR”或“NCHAR”(来自@M.Ali)。此外,在插入Unicode数据时,需要添加N标志。最重要的是在连接代码中设置 "CharacterSet" => "UTF-8"。像这样链接 - user2520217
2个回答

2
在表字段类型中使用N flags(nvarchar、ntext等)以支持Unicode,并在查询中添加N标志。
$query = "UPDATE [Management].[dbo].[Employee]
          SET [Management].[dbo].[Employee].[name] = N'你好'
          WHERE [Management].[dbo].[Employee].[EmpID]=1;";

$stmt = sqlsrv_query($conn, $query);

在 HTML 页面中使用字符集 utf8。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

谢谢你的回答。但是,还是不起作用。 我把 SQL 粘贴到 Studio 中。它可以工作,但在 PHP 上无法工作。 - user2520217
页面字符集是utf8吗?<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - Simone Nigro
我不知道为什么我使用nvarchar来存储中文单词并在插入数据(中文)时添加“N”来构建表格。即使将字符集设置为utf8,我也无法显示正确的单词,我需要设置Big5才能显示正确的中文单词。 - user2520217

2
无论何时在Sql Server中处理Unicode字符,您需要在传递的字符串前缀中加上“N”以告诉Sql Server传递的字符串可能包含一些Unicode字符。
例如:
DECLARE @Table TABLE (Column1 NVARCHAR(1000))

INSERT INTO @Table VALUES
(N'你好')  -- With N Prefix
,('你好')  -- Without N Prefix

SELECT * FROM @Table

╔═════════╗
║ Column1 ║
╠═════════╣
║ 你好     ║  -- With N Prefix
║ ??      ║  -- Without N Prefix
╚═════════╝

同样,在更新时,您需要使用N前缀字符串,类似于这样。
UPDATE [Management].[dbo].[Employee]
   SET [name] = N'你好'
 WHERE [EmpID]=1;

谢谢您的回答。但是,还是不起作用。 我把 SQL 粘贴到 Studio 中,它可以工作,但在 PHP 上却不能工作。 - user2520217
@user2520217 您需要确保您的列数据类型为 NVARCHARNCHAR,因为您不能将Unicode字符存储在VARCHARCHAR数据类型的列中。 - M.Ali
列名:name,, 数据类型:nvarchar(6)空值 - user2520217

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接