SQLSTATE [01000]:警告:1265 列的数据被截断

Posted

技术标签:

【中文标题】SQLSTATE [01000]:警告:1265 列的数据被截断【英文标题】:SQLSTATE[01000]: Warning: 1265 Data truncated for column 【发布时间】:2018-06-08 15:12:02 【问题描述】:

SQLSTATE[01000]:警告:第 1 行的“pay_totals”列的 1265 数据被截断

public function order(Request $req)
        $order = new Order;
        $order->pay_number = $req->checkout_number;
        $order->pay_totals = $req->checkout_total;
        $order->save();
        return redirect(route('pay'))->with('message','Sending infomation successfully');
    

刀片:

<input type="text" name="checkout_total" value="Cart::subTotal('0')  ">

帮助

【问题讨论】:

此错误的根本原因在于 mysql,由于我们看不到有关您的数据库表的任何信息,因此我认为这个问题无法回答。最有可能的是,您正在尝试存储一些太宽而无法放入目标列的数据,而 MySQL 会就此发出警告。 应该使用 TEXT : chartio.com/resources/tutorials/… 【参考方案1】:

问题是列pay_totals 无法存储您从输入中获得的任何内容,因为它太大了。

可能的解决方案

SQL: ALTER TABLE [orders] ALTER COLUMN [pay_totals] VARCHAR(MAX)

MYSQL: ALTER TABLE [orders] MODIFY COLUMN [pay_totals] VARCHAR(60000)

【讨论】:

【参考方案2】:

由于数据类型不匹配,可能会出现同样的错误。例如,如果您将字符串分配给浮点数,您将收到此错误。所以一定要检查数据的类型是否正确。我在 symfony 上遇到了这个错误。

【讨论】:

【参考方案3】:

有时会发生此错误,因为将数据插入到数据透视表中的 ('created_at','updated_At') 等额外列中。以下解决方案对我有用。

错误代码

$users=User::create($input['data']);
foreach ($input['products'] as $product) 
    if (array_key_exists('special_price', $product)) 
        $userProducts[$product['id']] = ['special_price' => $product['special_price']];
     else 
        $userProducts[$product['id']] = ['special_price' => ''];
    
    $userProducts['created_at'] = Carbon::now()->toDateTimeString();
    $userProducts['updated_at'] = Carbon::now()->toDateTimeString();


//individual product with special price of each product
/*
Output before code correction

array (1 =>
array(
    'special_price' => '',
),
'created_at' => '2019-04-07 14:28:27',
'updated_at' => '2019-04-07 14:28:27',))
*/
$users->products()->sync($userProducts);

代码更正

$users=User::create($input['data']);
foreach ($input['products'] as $product) 
    if (array_key_exists('special_price', $product)) 
        $userProducts[$product['id']] = ['special_price' => $product['special_price']];
     else 
        $userProducts[$product['id']] = ['special_price' => ''];
    
    // below lines are after code correction
    $userProducts[$product['id']]['created_at'] = Carbon::now()->toDateTimeString();
    $userProducts[$product['id']]['updated_at'] = Carbon::now()->toDateTimeString();


//individual product with special price of each product
/*
Output after code correction

array (1 =>
array(
    'special_price' => '',
    'created_at' => '2019-04-07 14:28:27',
    'updated_at' => '2019-04-07 14:28:27',
),)
*/
$users->products()->sync($userProducts);

【讨论】:

以上是关于SQLSTATE [01000]:警告:1265 列的数据被截断的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [01000] SQLDriverConnect:0 [unixODBC] [驱动程序管理器]无法打开库“IBMDB2”:找不到文件

点燃odbc SQLSTATE [01000]错误如何解决?

连接失败: SQLState:'01000' SQL Server 错误: 53 [Microsoft][ODBC SQL Server Driver][DBNETLIB]Connec

spring MVC + Ibatis 连接DB2 数据库 出现警告信息

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parame

收到警告:SQL 错误:1205,SQLState:41000 错误:超过锁定等待超时;尝试重新启动事务。使用休眠保存记录