Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 储存????数据库中存在编码问题吗?_Php_Sql Server_Nginx_Laravel 5.3_Sqlsrv - Fatal编程技术网

Php 储存????数据库中存在编码问题吗?

Php 储存????数据库中存在编码问题吗?,php,sql-server,nginx,laravel-5.3,sqlsrv,Php,Sql Server,Nginx,Laravel 5.3,Sqlsrv,我的MS SQL数据库的排序规则设置为SQL\u Latin1\u General\u CP1\u CI\u AS。我通过PHP(Freebsd操作系统上的Nginx服务器)连接到数据库。当我试图保存字符时,如ജെയിംസ്, جیمز等,它存储为?。在PHP中,我的默认字符集是UTF-8 更新: 当我在本地Windows环境中尝试时,它成功地存储了字符。但在Freebsd环境中,它遇到了问题。下面是分别来自Windows和Freebsd环境的存储过程调用 从Windows计算机进行跟踪: de

我的MS SQL数据库的排序规则设置为
SQL\u Latin1\u General\u CP1\u CI\u AS
。我通过PHP(Freebsd操作系统上的Nginx服务器)连接到数据库。当我试图保存字符时,如
ജെയിംസ്, جیمز
等,它存储为
。在PHP中,我的默认字符集是
UTF-8

更新: 当我在本地Windows环境中尝试时,它成功地存储了字符。但在Freebsd环境中,它遇到了问题。下面是分别来自Windows和Freebsd环境的存储过程调用

从Windows计算机进行跟踪:

declare @p1 int
set @p1=2
declare @p14 int
set @p14=0
exec sp_prepexec @p1 output,N'@P1 nvarchar(15),@P2 nvarchar(16),@P3 nvarchar(10),@P4 nvarchar(max),@P5 nvarchar(max),@P6 char(1),@P7 char(1),@P8 nvarchar(max),@P9 int,@P10 nvarchar(1),@P11 int OUTPUT',N'EXEC ValidateFBLogin_sp @p_UserName = @P1, @p_Email = @P2, @p_FBID = @P3, @p_DeviceToken = @P4, @p_IPAddress = @P5, @p_Latitude = @P6, @p_Longitude = @P7, @p_EndpointArn = @P8, @p_UserAccountTypeID = @P9, @p_DeviceType = @P10, @p_ErrID = @P11 OUTPUT',N'ആഷ്ലി',N'ashley@gmail.com',N'67463sgs7s',N'',N'',NULL,NULL,N'',2,N'1',@p14 output
select @p1, @p14
来自Freebsd的跟踪:

EXEC ValidateFBLogin_sp 
@p_UserName = 'ആഷ്ലി', @p_Email = 'ashley@gmail.com', @p_FBID = '45534552', @p_DeviceToken = '', 
@p_IPAddress = '', @p_Latitude = NULL, @p_Longitude = NULL, 
    @p_EndpointArn = '', @p_UserAccountTypeID = 2, 
@p_DeviceType = '1', @p_ErrID = 0
在windows中,它是以in-param p_用户名结尾的N,但在Freebsd中不是

Update2:关于来自
PHP
Laravel5.3框架的数据库连接

连接参数:config/database.php

return [
'sqlsrvstaging' => [
    'driver' => 'sqlsrv',
    'host' => 'XXXXX',
    'database' => 'XXXXX',
    'username' => 'XXXXX',
    'password' => 'XXXXX',
    'prefix' => '',
    'charset' => 'UTF-8',
    'strict' => false,
    'pooling' => false,
    ]
];

代码是$this->pdo=DB::connection('sqlsrvstaging')->getPdo()

不确定这是否适用于PHP,但您可以尝试以下方法:

  • 将列的类型更改为
    nvarchar(xx)
  • 执行插入或更新时,请使用N前缀
像这样:

insert into Table(C1, C2)
values (N'123456789', N'Name')
你不能

Latin-1是为西欧语言(西班牙语、法语…)设计的单字节字符集。它不能像您需要的那样物理存储随机Unicode字符

您需要返回设计表并将涉及的列类型更改为支持Unicode的对应列(也称为“national”),例如从
VARCHAR
更改为
NVARCHAR

您还需要确保正确配置了PHP连接。您没有说您正在使用什么扩展,但在SQLSRV扩展中,您可以这样做:

sqlsrv_connect($dsn, array(
    // ...
    'CharacterSet' => 'UTF-8',
));

使用Unicode字符集存储UTF-8编码的文本:您好,您解决了吗?我尝试了这个方法,但没有成功。请看我的问题update@KirenSiva“尝试此”是否确认您正在使用SQLSRV扩展?您还没有明确地说出来(也没有共享任何PHP代码)。很抱歉,我错过了。请查看更新。好的,对不起,我对拉威尔一无所知。