MYSQL警告无效的utf8字符串

MYSQL警告无效的utf8字符串,mysql,utf-8,character-encoding,type-conversion,iso-8859-1,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控制台中登录以下警告 在上述警告中,以下字符代表什么? “AE2065”、“927320”、“927320”、“927320”、“F16120”、“C02070”、“AE2043”、“F16F6C”、“93426F”、“93426F”、“E4646F”、“E46E73”、

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

SELECT convert(binary convert(summary using latin1) using utf8) FROM blogs b;
在mysql控制台中登录以下警告

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


我怎样才能找到上面列表中对应的实际字符符号呢?

我猜您的数据存储为
拉丁-1
字符集。您可以将其转换为以下内容:

SELECT convert(cast(convert(summary using  latin1) as binary) using utf8) FROM blogs b;
您是否真的打算将数据存储为
拉丁语-1
?如果您打算将您的
摘要
存储为
UTF-8
,您可以按如下方式更新表格:

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

好的,给定这些源字符集,您可以得到这个文本。例如,一些人将
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
很普遍。我再试试:

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 '
同样,拉丁语1似乎也有可能

所以,。。。您需要做的是声明您输入到MySQL的字节是用
latin1
编码的。然后,它们将自动转换为列的声明,该声明应为
utf8
(或者
utf8mb4
,如果需要中文和表情符号)

由于您的表中似乎已经有拉丁1字节(在列
摘要
),这不是您是否有utf8的问题;您没有utf8。并且该列未声明为utf8

那么,你到底想做什么??也许您想
更改表以将字符集更改为utf8?看

ALTER TABLE ... CONVERT TO ...
你所拥有的非常接近:

CONVERT(BINARY CONVERT(UNHEX('AE2065') USING latin1) USING utf8) --> Warning
CONVERT(       CONVERT(UNHEX('AE2065') USING latin1) USING utf8) --> '® e'
但是,那你会怎么处理呢?如果列是latin1,并且您将转换后的内容重新插入,您将得到“双重编码”,使情况变得更糟

也许在拉丁1列中也有utf8编码的字符?真是一团糟——“双重编码”


请参阅,然后进一步详细说明您的问题。

是的数据存储为拉丁文1,但我想找出在执行上述转换时导致上述警告的字符。截断数据的update语句和某些字符被问号替换。我想您可能需要在此处查看:另请参见--请不要重复发布相同的问题。或者这应该是不同的吗?谢谢,我删除了重复的问题