我试图使用下面的查询对列数据强制使用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'
如何找出上面列表对应的实际字符符号?
最佳答案
好吧,给定这些源字符集,就得到了这个文本。例如,有几个将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 '
同样,拉丁美洲人也有可能。
所以,。。。您需要做的是声明您输入到MySQL的字节是在
latin1
中编码的。然后它们将自动转换为列的声明,该声明应该是utf8
(如果您想要中文和Emoji,则应该是utf8mb4
)。因为表中似乎已经有了latin1字节(在
summary
列中),所以您是否有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,并且将转换后的内容粘贴回中,则会得到“双重编码”,使情况更糟。
也许你也有utf8编码的字符在拉丁1列中?真是一团糟——“双重编码”。
请参见Trouble with UTF-8 characters; what I see is not what I stored然后进一步阐述您的问题。
关于mysql - MYSQL警告无效的utf8字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48786155/