Mysql 1366字符串值不正确:'\x89lise';对于列(仅第一个字节/第一个字符)

Mysql 1366字符串值不正确:'\x89lise';对于列(仅第一个字节/第一个字符),mysql,Mysql,我试图向MySQL表中添加一条新记录,但出现以下错误: 执行“插入队友”时发生异常(id、名字、缓存会话数、创建时间、更新时间) 值(?,,,?,?)' 使用参数[“\xb6\xc4\xcf\x4e\x19\xcc\x43\x04\x82\x63\x79\x31\xec\x21\x5e\x66”、“\x3f\x89\x6c\x69\x73\x65”、0,“2019-10-28 20:11:42”、“2019-10-28 20:11:42”]: SQLSTATE[HY000]:一般错误:1366第

我试图向MySQL表中添加一条新记录,但出现以下错误:

执行“插入队友”时发生异常(id、名字、缓存会话数、创建时间、更新时间)
值(?,,,?,?)'
使用参数[“\xb6\xc4\xcf\x4e\x19\xcc\x43\x04\x82\x63\x79\x31\xec\x21\x5e\x66”、“\x3f\x89\x6c\x69\x73\x65”、0,“2019-10-28 20:11:42”、“2019-10-28 20:11:42”]:
SQLSTATE[HY000]:一般错误:1366第1行“first_name”列的字符串值不正确:“\x89lise”

非常奇怪的是,插入一个名为Élise的新记录不起作用(并产生此错误),但插入Élise起作用,事实上,只有当字段的第一个字节或第一个字符包含重音字符时,才会发生错误

设置:

  • 我使用MySQL 8.0.18
  • 我使用字符集
    utf8mb4
  • team\u mate
    具有排序规则
    utf8mb4\u unicode\u ci
  • 我的表中的字段
    first\u name
    具有排序规则
    utf8mb4\u unicode\u ci
的结果显示变量“%cola%”从连接执行:

collation_connection = utf8mb4_unicode_ci
collation_server = utf8mb4_unicode_ci
collation_database = utf8mb4_unicode_ci
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_filesystem = binary
character_set_results = utf8mb4
character_set_server = utf8mb4
character_set_system = utf8
的结果显示变量,如“%charac%”从连接执行:

collation_connection = utf8mb4_unicode_ci
collation_server = utf8mb4_unicode_ci
collation_database = utf8mb4_unicode_ci
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_filesystem = binary
character_set_results = utf8mb4
character_set_server = utf8mb4
character_set_system = utf8

谢谢

好吧,没关系,我不该责怪Symfony/doctor/MySQL。。。经过一些调试,我发现代码中有以下函数:

public function setFirstName(string $firstName): self
{
    $this->firstName = mb_strtoupper(substr($firstName, 0, 1)).substr($firstName, 1);
}
第一个字符应该是大写的,但由于第一个字符的长度超过一个字节,因此会创建错误的字节,从而阻止在数据库中插入。我用
mb_substr
替换了
substr
,那时一切都很顺利


问题解决了,谢谢艾尔顿

您可能需要检查表排序规则。否则,这些文章可能会帮助您解决这一切。(使用utf8mb4而不是utf8)您好,谢谢,我已经检查了这两篇文章,然后检查了我的连接/数据库/表/字段设置,一切似乎都正常,这里是我拥有的:排序规则\连接=utf8mb4 \ unicode \ ci排序规则\服务器=utf8mb4 \ unicode \ ci排序规则\数据库=utf8mb4 \ unicode \ ci字符\集合\客户端=utf8mb4字符\集合\连接=utf8mb4字符\集合\数据库=utf8mb4字符\集合\文件系统=二进制字符\集合\结果=utf8mb4字符\集合\服务器=utf8mb4character\u set\u system=utf8此外,数据库排序规则和表排序规则都是utf8mb4\u unicode\u ci。可能问题不在于mysql,而在于为您执行插入查询的应用程序。这是一个有趣的问题!当我尝试使用PhpMyAdmin执行相同的查询时:
插入队友(id、名字、缓存的会话数、创建的会话数、更新的会话数)值(0xb6c4cf4e19cc430482637931ec215e66、0x3f896c697365、0、“2019-10-28 20:11:42”、“2019-10-28 20:11:42”)
它失败了,出现了相同的错误。。。但是,如果我使用字符串值而不是二进制值来执行此操作:
插入队友(id、名字、缓存会话数、创建时间、更新时间)值(0xb6c4cf4e19cc430482637931ec215e66,“Élise”,0,“2019-10-28 20:11:42”,“2019-10-28 20:11:42”)
它正常工作确实,你是对的艾尔顿。我正在使用Symfony 4.2和Doctrine标准实现,当字符串链的第一个字符加重时,Doctrine会将整个字段视为二进制,并将其作为二进制发送到MySQL。然而,如果我试着发送“eÉlise”,信条会将其作为字符串发送,并且会起作用。为什么会这样,我还不知道,但这不是一个问题。