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,[email protected])
您需要指定函數中字段的長度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 關注
- 175 瀏覽
添加回答
舉報