Doctrine orm 原则:数据对列太长(由于转义)
我得到了以下错误: “name”列的长度为255个字符,但输出转义似乎把它搞砸了。我做错了什么 执行“插入零件(删除数据)”时发生异常, 带有参数的名称、代码、价格、库存值(?、、、、、)' [null, “\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\x64\x65\x65\x64\x20\X62\x65\x65\x67\x69\X66”, “1101012”,“12.00”,0]: SQLSTATE[22001]:字符串数据,右截断:1406数据太长,无法读取 第1行的“名称”列500内部服务器错误-DriverException 2 链接的例外情况: PDOException»PDOException» 从my.ini:Doctrine orm 原则:数据对列太长(由于转义),doctrine-orm,symfony,Doctrine Orm,Symfony,我得到了以下错误: “name”列的长度为255个字符,但输出转义似乎把它搞砸了。我做错了什么 执行“插入零件(删除数据)”时发生异常, 带有参数的名称、代码、价格、库存值(?、、、、、)' [null, “\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\x64\x65\x65\x64\x20\X62\x65\x65\x
[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
结果发现有两个问题 一个是,条令不尊重MySQL服务器设置的默认排序规则,甚至不尊重config.yml等中的无数选项。最后,我发现它是这样的,我真的不明白为什么。但它现在起作用了
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
1002: "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"
其次,我试图加载到数据库中的数据源(csv文件)显然不是utf8格式。将其保存到“utf8”中解决了问题。现在我想知道如何让php将输入转换成所需的格式。输出转义是什么意思?这是一个Symfony消息;在执行em->flush()之前,能否显示控制器代码?特别是您为
名称所做的!!!!这是包含所有转义码的一个。如果您确实试图持久化大于255个字符的数据(考虑到错误消息,这似乎不太可能),请增加列大小。添加了请求的代码。如果我将字符串截断为大约5个字符,它就可以工作,但这显然不是我想要的。为什么不将相应实体中“name”属性的类型从字符串更改为文本?嗨@pavlovich这实际上有些过分,因为我的字符串永远不会超过255个字符。但我现在确实把它改成了“文本”,重新生成了实体,删除并重建了数据库,但它仍然说数据太长了。SQLSTATE[22001]:字符串数据,右截断:1406数据对于第1行的“name”列太长
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
1002: "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"