MYSQL警告无效的utf8字符串
我正在尝试使用下面的查询对列数据强制执行UTF-8编码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”、
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语句和某些字符被问号替换。我想您可能需要在此处查看:另请参见--请不要重复发布相同的问题。或者这应该是不同的吗?谢谢,我删除了重复的问题