比方说,如果我正在制作一个网站,允许人们在他们的用户名中使用emoji表情符号,我将 for each 用户提供一个表来存储他们的信息/个人资料/等等,其名称将与他们的用户名相同.

我可以将表情符号或任何特殊字符作为数据存储到表格中.

字符集和排序规则都是为我的数据库设置的utf8mb4,当我创建表时,我也在我的php mySQLI_QUERY函数中使用了"charset=utf8mb4"语句,它对所有类型的符号、中文字符、日语字符都很好地工作,即使当我试图将这些特殊字符作为表名的一部分时,也没有问题.

然而,当我try 将表情符号作为表名的一部分时,无论我重命名还是创建一个表,mysql都会给我一个"#1300 - Invalid utf8 mb 4 character string"错误.

桌名中不能有表情符号吗?如果有可能,怎么做呢?

推荐答案

你问的问题的答案是否定的,你不能在表标识符中使用表情符号,至少在当前版本的MySQL中不能(从8.3版开始).

mysql> create table `my😊table` ( i int );
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------------------------+
| Level   | Code | Message                                                               |
+---------+------+-----------------------------------------------------------------------+
| Warning | 1300 | Cannot convert string 'my\xF0\x9F\x98\x8A...' from utf8mb4 to utf8mb3 |
+---------+------+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| my?table       |
+----------------+

https://dev.mysql.com/doc/refman/8.0/en/identifiers.html表示:

带引号的标识符中允许的字符包括完整的Unicode Basic多语言平面(BMP),U+0000除外

BMP是UTF-8的子集,对应于MySQL的utf8mb3字符集.补充多语言平面(SMP)是UTF-8的完整范围,它对应于MySQL的utf8mb4字符集.

基本上,从MySQL8.3开始,INFORMATION_SCHEMA表仍然使用utf8mb3,只支持基本的多语种平面.我预计这种情况最终会改变,因为他们似乎正在逐步淘汰utf8mb3,转而支持utf8mb4,但它将出现在MySQL的某个future 版本中.

表情符号属于补充多语种平面.

Mysql相关问答推荐

括号在SQL查询中的作用?

正则表达式转换为MYSQL格式

为什么 MAX 函数通过调用在 group 中生成正确的结果

MySQL中如何对字符串进行算术运算?

Mysql:使用like Select 查询

MySQL 计数出现的百分比大于

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

根据使用 mysql 的第一个过滤结果添加更多表行

在 MySQL 中 Select COUNT of MAX

Golang Gorm没有从关联表中检索数据

SQL 中的双杠 (||) 是什么意思?

从终端访问 MAMP 的 MySQL

何时在 mysql 中使用 TEXT 而不是 VARCHAR

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

如何存储重复日期牢记夏令时

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

从 MySQL 中的日、月、年字段创建日期

将行插入 MySQL 数据库的最有效方法

为什么 GRANT 在 MySQL 中不起作用?