"字符串值不正确:"将UTF8文本插入latin1列时出现MySQL问题

时间:2016-05-06 01:04:47

标签: java mysql encoding utf-8 latin1

我生产的这个MySQL表是charset latin1_swedish_ci(又名latin1)。

现在,有一个UTF-8格式的传入内容(字符串:&#34; \ ud55c \ ubc24 \ uc758&#34;)需要插入到名为 keywords <的TEXT列字段中/ strong>在表中。

当我尝试执行INSERT时,出现此错误:

Incorrect string value: '\xED\x95\x9C\xEB\xB0\xA4...' for column 'keywords' at row 1

我在我的Java代码中尝试了各种方法尝试将UTF8转换为ISO-8859-1,如下所示,我仍然遇到同样的错误:

String convertedString = new String(originalString.getBytes("UTF-8"), "ISO-8859-1");

我知道StackOverflow上有一些解决方案提到将labase1中的MySQL表的字符集更改为UTF8,遗憾的是我不能这样做,因为这是一个实时生产的MySQL主服务器,而且它一直使用latin1。 / p>

有没有人有任何建议来解决这个问题&#34;不正确的字符串值&#34;错误?

由于 IS

2 个答案:

答案 0 :(得分:0)

你想要做的事情是不可能的,除非utf8字符串中的字符碰巧在latin1中有表示......而latin1是一个很小的单字节字符集(少于256个可能的字符,总数),因此绝大多数有效的utf8字符没有等效的latin1表示。

您不能在列的字符集不支持的列中存储任何字符。这不是&#34;转换&#34;从一个到另一个。

如果您需要unicode,则至少需要一个utf8列,并且修改表是唯一的选择。尝试不这样做就像尝试在无符号整数列中存储负数。无符号的整数不会是负面的 - 它不是转换的问题。

对于任何支持字符数据类型的RDBMS都是如此,并且不是特定于MySQL的限制。

答案 1 :(得分:0)

xs = ys -> (:) x xs = (:) x ys한밤的Mojibake - 在某个阶段它被转换为latin1。但是한밤是Unicode。 Python的模式是什么?你刚开始有这个吗?

\ud55c\ubc24

More Python checklist

更多

utf8是首选; euckr是可能的。但是......问题不在于选择字符集,而是在整个应用程序中指定该字符集时保持一致。

你在使用Python吗?它被标记为Java?

对于Java / JDBC,在getConnection()调用中需要# -*- coding: utf-8 -*-

你需要这些:

  • 客户端中的字节数必须为utf8,例如十六进制?useUnicode=yes&characterEncoding=UTF-8。 (韩语字符在utf8中都是3个字节。)
  • 客户端和服务器之间的连接需要是utf8。连接后立即执行ED959C是另一种方法。
  • 列/表必须为SET NAMES utf8
  • 如果您使用的是html,则需要CHARACTER SET utf8

对于韩语,<meta charset=UTF-8>utf8mb4一样好。检查上面的4个项目,并向我们“证明”你正在做所有这些项目。

对于JSP和Java Servlet,保证略有不同advice