【问题标题】:Getting [SqlExceptionHelper] Incorrect string value: '\xF0\x9F\x90\xBE V...' although the table is in UTF-8 [duplicate]获取 [SqlExceptionHelper] 不正确的字符串值:'\xF0\x9F\x90\xBE V...' 尽管表是 UTF-8 [重复]
【发布时间】:2016-11-27 18:18:49
【问题描述】:

在我的 java 项目中,我不断收到[SqlExceptionHelper] Incorrect string value: '\xF0\x9F\x90\xBE V...',尽管 MySQL Workbench 显示该表是 UTF-8 格式,并且在工作台中添加值“Brandstätter”有效。

我在工作台中将排序规则从 utf8 更改为 utf8mb4,但这不起作用。此外,在 java 项目中,我的 application.properties 文件中有:jdbc.url = jdbc:mysql://localhost:3306/recommendations?useUnicode=true&characterEncoding=utf8(将utf8 更改为utf8mb4 导致Unsupported character encoding 'utf8mb4')。

另外,这会返回 utf8: SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "db-name";

我能做什么?

编辑:正在插入的数据:“Loy ¾ Virtual Pet Game”。

Edit2:现在我看得更仔细了,this application's name 解决了这个问题。我该怎么办?忽略奇怪的字符(Character.isISOControl,还是有比 UTF-8 更强大的排序规则?

【问题讨论】:

  • 您可以添加将数据插入数据库的 java 代码吗?
  • monkeyStix - 正如我所说,我试图声明 utf8mb4 但它没有用。我是不是做错了什么?
  • 你用的是什么版本的mysql?
  • @Ran,你使用 Spring JDBC 吗?
  • 是的,我使用 Spring。另外,当我尝试导出数据时,MySQL 说它是 5.7.12 版本。

标签: java mysql jdbc utf-8


【解决方案1】:

您的表中需要utf8mb4在您与数据库的连接中。

这是线索:

\xF0\x9F\x90\xBE

注意第一个字节是十六进制F0。那是 4 字节“字符”的 UTF8 导入。 MySQL 的utf8 不能处理超过 3 个字节; utf8mb4 会。

注意:在 MySQL 之外,“UTF-8”表示任意长度的字符。在 MySQL 内部,“utf8”和“utf8mb4”之间存在令人困惑的区别。

【讨论】:

猜你喜欢
  • 2013-12-23
  • 2012-11-19
  • 1970-01-01
  • 2020-02-20
  • 2019-10-08
  • 1970-01-01
  • 2019-05-27
  • 2018-05-05
相关资源
最近更新 更多