2 回答
TA贡献1852条经验 获得超1个赞
根据您最后的错误消息,当您尝试完整的原始查询时:
SQLSTATE[22001]:[Microsoft][SQL Server 的 ODBC 驱动程序 13][SQL Server]字符串或二进制数据将被截断。(SQL: INSERT INTO [dbo].[tbl_rfaccount] ([id] ,[password] ,[accounttype] ,[birthdate] ,[BCodeTU] ,[Email]) VALUES ((CONVERT(binary, user01)), (CONVERT (二进制,密码01)),0,2011-11-11 00:00:00,1,user@example.com)
您需要指定函数中字段的长度CONVERT
。
不是CONVERT(binary, user01)
,但是CONVERT(binary(16), user01)
。指定与目标表中定义的列相同的长度。
如果不指定长度,则在某些情况下假定为 1,在某些情况下假定为 30。
CONVERT
如果未指定,该函数假定长度为 30。
-- CONVERT Syntax: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )...
长度
对于允许用户指定长度的数据类型,指定目标数据类型的长度的可选整数。默认值为 30。
这是一个简单的例子,演示了正在发生的事情:
SELECT CONVERT(binary(16), '1234567890123456') AS Bin16 ,CONVERT(binary, '1234567890123456') as BinNoLength ;
结果:
+------------------------------------+----------------------------------------------------------------+
| Bin16 | BinNoLength |
+------------------------------------+----------------------------------------------------------------+
| 0x31323334353637383930313233343536 | 0x313233343536373839303132333435360000000000000000000000000000 |
+------------------------------------+----------------------------------------------------------------+
因此,当您未在 中指定长度时CONVERT,您将得到结果binary(30)。
当您尝试将此 long 值插入到表中的列中时,您的列不够长,无法存储它,因此 long 值被截断,并且您会看到此错误消息。
TA贡献1845条经验 获得超8个赞
你能试试这个吗
return DB::connection('sqlsrv_rfo_user')
->table('dbo.tbl_rfaccount')
->insert([
'Email' => $email,
'id' => DB::raw(`CONVERT(binary,$username)`),
'password' => DB::raw(`CONVERT(binary,$password)`),
'birthdate' => $birthday,
'accounttype' => 0,
'BCodeTU' => 1
]);
- 2 回答
- 0 关注
- 127 浏览
添加回答
举报