【发布时间】:2016-07-17 18:21:43
【问题描述】:
我收到以下错误:
“名称”列有 255 个字符长,但输出转义似乎把它搞砸了。我做错了什么?
执行 'INSERT INTO 部件(deletedAt, name, code, price, in_stock) VALUES (?, ?, ?, ?, ?)' with params [无效的, "\x50\x6f\x73\x74\x4e\x4c\x20\x50\x72\x69\x6f\x72\x69\x74\x79\x20\x50\x61\x6b\x6b\x65\x74\x20\x41\ x61\x6e\x67\x65\x74\x65\x6b\x65\x6e\x64\x20\x42\x65\x6c\x67\x69\xeb", "1101012", "12.00", 0]:
SQLSTATE[22001]:字符串数据,右截断:1406 数据太长 第 1 行的列“名称”500 内部服务器错误 - DriverException 2 链接例外: PDOException » PDOException »
foreach ($csv as $row) { #persist every part
$part = new Part();
$part->setCode($row[0]);
$part->setName($row[1]);
$part->setPrice(preg_replace("/[^0-9.]/","", $row[2])); # extract decimal number
$part->setInStock(($row[3])?1:0);
$em = $this->getDoctrine()->getManager();
$em->persist($part);
$count++; # get number of commits
}
$em->flush();
来自我的 my.ini:
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
no-auto-rehash
[mysqld]
port = 3306
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake
【问题讨论】:
-
输出转义是什么意思?这是一个 Symfony 消息;您可以在执行 em->flush() 之前显示控制器代码吗?特别是您为
name所做的事情!!!!那就是所有这些转义码。 -
如果您真的想保留超过 255 个字符的数据(考虑到您的错误消息,这似乎不太可能)然后增加列大小。
-
添加了请求的代码。如果我将字符串截断为大约 5 个字符,它会起作用,但这显然不是我想要的。
-
为什么不将相应实体中的“名称”属性类型从字符串更改为文本? doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/…
-
嗨@pavlovich 这实际上是矫枉过正,因为我的字符串永远不会超过 255 个字符。但我现在确实将其更改为“文本”,重新生成实体,删除并重建数据库,但它仍然说数据太长。 SQLSTATE [22001]:字符串数据,右截断:1406 第 1 行的列“名称”的数据太长
标签: doctrine-orm symfony