当我运行SELECT CHAR(128,129,130,131,132,133,134,135,136,137);时
我得到了0x80818283848586878889而不是Çüéâäàåçêë。
有人知道为什么吗?,我用的是字符集utf8mb4。
当我运行show variables like '%char%';时

我使用的是MySQL版本8.0.26
输出字符集是"DOS西欧“
SELECT CHAR(128,129,130,131,132,133,134,135,136,137 using cp850)这真的很奇怪。我从O‘’Reilly的“学习SQL”一书中得到了这个查询,他们说这个字符集是utf8mb4
发布于 2021-09-16 02:38:37
80818283848586878889是字符集cp850中的Çüéâäàåçêë,而不是utf8mb4。
如果你的客户有十六进制80,81,等等(十进制128,129等等),然后告诉MySQL
cp850。SET NAMES cp850。这样,客户机可以继续使用cp850,而数据存储为utf8mb4,恰好是十六进制C387 C3BC C3A9 C3A2 C3A4 C3A0 C3A5 C3A7 C3AA C3AB。(为了清晰起见,我增加了空格。)
我从未见过或用过你从那本古董书上学到的语法。我推断它的意思是“将80,81等作为CP850,并将其转换为您正在使用的字符集”。注意:
SELECT CHAR(0xC387C3A7 USING utf8mb4);
+--------------------------------+
| CHAR(0xC387C3A7 USING utf8mb4) |
+--------------------------------+
| Çç |
+--------------------------------+注意当十六进制和字符集匹配时,它是如何“正确地”转换的。
也许CHAR(... USING ...)是CONVERT(... USING ...)的同义词。
https://dba.stackexchange.com/questions/299615
复制相似问题