我生产的这个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
答案 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
更多强>
utf8是首选; euckr是可能的。但是......问题不在于选择字符集,而是在整个应用程序中指定该字符集时保持一致。
你在使用Python吗?它被标记为Java?
对于Java / JDBC,在getConnection()调用中需要# -*- coding: utf-8 -*-
。
你需要这些:
?useUnicode=yes&characterEncoding=UTF-8
。 (韩语字符在utf8中都是3个字节。)ED959C
是另一种方法。SET NAMES utf8
。CHARACTER SET utf8
。对于韩语,<meta charset=UTF-8>
与utf8mb4
一样好。检查上面的4个项目,并向我们“证明”你正在做所有这些项目。
对于JSP和Java Servlet,保证略有不同advice。