Php 储存????数据库中存在编码问题吗?
我的MS SQL数据库的排序规则设置为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
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代码)。很抱歉,我错过了。请查看更新。好的,对不起,我对拉威尔一无所知。