MYSQL警告无效的utf8字符串

时间:2018-02-14 11:30:56

标签: mysql utf-8 character-encoding type-conversion iso-8859-1

我正在尝试使用以下查询对列数据强制执行UTF-8编码。

SELECT convert(binary convert(summary using latin1) using utf8) FROM blogs b;

以下警告登录mysql控制台

enter image description here

上述警告中以下字符代表什么?     'AE2065','927320','927320','927320','F16120','C02070','AE2043','F16F6C','93426F','93426F','E4646F','E46E73','E46DE4','E47974','C02070','934355','934355'

如何找到上面列表中相应的实际字符符号?

2 个答案:

答案 0 :(得分:2)

嗯,给定这些源字符集,你会得到这个文本。例如,有几个人将factor视为from django.urls import path urlpatterns = [ ... path('articles/<slug:some_title>/', myapp.views.blog_detail, name='blog_detail'), ... ]

AE

对于®,可能的解释是CONVERT(CONVERT(UNHEX('AE2065') USING %s) USING utf8mb4): cp1250, cp1251, cp1256, cp1257, geostd8, hebrew, latin1, latin5, latin7 4 3 '® e' cp850, cp852, keybcs2 4 3 '« e' cp866 4 3 'о e' hp8 4 3 'Û e' latin2 4 3 'Ž e' macce 4 3 'ģ e' macroman 4 3 'Æ e' armscii8 5 3 '… e' cp932, sjis 5 3 'ョ e' koi8r, koi8u 5 3 '╝ e' tis620 5 3 'ฎ e'

92

到目前为止,我发现很常见。我会尝试另一个:

CONVERT(CONVERT(UNHEX('927320') USING %s) USING utf8mb4)

                              cp932, sjis   4  2 '痴 '
                                    euckr   4  2 '뭩 '
                                      gbk   4  2 '抯 '
                                    cp850   4  3 'Æs '
                                    cp852   4  3 'ĺs '
                                    cp866   4  3 'Тs '
                                  keybcs2   4  3 'Žs '
                          macce, macroman   4  3 'ís '
cp1250, cp1251, cp1256, cp1257, geostd8, latin1
                                            5  3 '’s '

再次,latin1似乎很可能。

所以,...你需要做的是声明你提供给MySQL的字节是用latin1编码的。然后它们将自动转换为列的声明,如果您需要中文和表情符号,则应为CONVERT(CONVERT(UNHEX('F16120') USING %s) USING utf8mb4) big5 4 2 '鎙 ' cp932 4 2 ' ' gbk 4 2 '馻 ' armscii8 4 3 'րa ' cp1250, cp1257, dec8, latin1, latin2, latin5, latin7 4 3 'ña ' cp1251 4 3 'сa ' cp850, keybcs2 4 3 '±a ' cp852 4 3 '˝a ' cp866 4 3 'ёa ' greek 4 3 'ρa ' hebrew 4 3 'סa ' hp8 4 3 'þa ' koi8r, koi8u 4 3 'Яa ' macce 4 3 'Ůa ' macroman 4 3 'Òa ' tis620 5 3 '๑a ' (或latin1

由于你似乎已经在表格中有latin1字节(在utf8列中),这不是你是否有utf8的问题;你做有utf8。该列声明为utf8。

那么,你真的想做什么?也许您想要utf8mb4表将字符集更改为utf8?参见

summary

你所接近的是:

ALTER

但是,你会用它做什么?如果列是latin1,并且您将转换后的内容重新粘贴,则会出现“双重编码”,使事情变得更糟。

也许您还有一个位于latin1列中的utf8编码字符?那是一团糟 - “双重编码”。

请参阅Trouble with UTF-8 characters; what I see is not what I stored,然后进一步详细说明您的问题。

答案 1 :(得分:0)

我猜您的数据存储为latin-1字符集。您可以将其转换为:

SELECT convert(cast(convert(summary using  latin1) as binary) using utf8) FROM blogs b;

您确实打算将数据存储为latin-1吗?如果您打算将summary存储为UTF-8,则可以按如下方式更新您的表格:

UPDATE blogs SET 
    summary=convert(cast(convert(summary using  latin1) as binary) using utf8)
WHERE 1