首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL查询显示类似0x8081的内容,而不是特殊字符。

MySQL查询显示类似0x8081的内容,而不是特殊字符。
EN

Database Administration用户
提问于 2021-09-15 09:35:02
回答 1查看 603关注 0票数 1

当我运行SELECT CHAR(128,129,130,131,132,133,134,135,136,137);

我得到了0x80818283848586878889而不是Çüéâäàåçêë

有人知道为什么吗?,我用的是字符集utf8mb4

当我运行show variables like '%char%';

我使用的是MySQL版本8.0.26

输出字符集是"DOS西欧“

代码语言:javascript
运行
复制
SELECT CHAR(128,129,130,131,132,133,134,135,136,137 using cp850)

这真的很奇怪。我从O‘’Reilly的“学习SQL”一书中得到了这个查询,他们说这个字符集是utf8mb4

EN

回答 1

Database Administration用户

发布于 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,并将其转换为您正在使用的字符集”。注意:

代码语言:javascript
运行
复制
SELECT CHAR(0xC387C3A7 USING utf8mb4);
+--------------------------------+
| CHAR(0xC387C3A7 USING utf8mb4) |
+--------------------------------+
| Çç                             |
+--------------------------------+

注意当十六进制和字符集匹配时,它是如何“正确地”转换的。

也许CHAR(... USING ...)CONVERT(... USING ...)的同义词。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/299615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档