首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在MySQL5.6中插入utf8mb4字符

问无法在MySQL5.6中插入utf8mb4字符
EN

Database Administration用户
提问于 2015-01-15 11:23:44
回答 3查看 26.6K关注 0票数 5

最近,我在mysql数据库中插入emoji和其他4个字节字符时遇到了问题,然后我发现我的mysql版本是5.1,它不支持utf8mb4,所以我升级到MySQL5.6,它支持utf8mb4,在我的排序规则中,我可以选择utf8mb4。但是当我尝试通过phpmyadmin直接插入表行时,我也会得到这个错误引用这个链接。

代码语言:javascript
复制
       http://dba.stackexchange.com/questions/59126/set-value-of-character-set-client-to-utf8mb4


 1 row affected.
      Warning: #1366 Incorrect string value: '\xF0\x9F\x9A\x8A k...' for column 'rajulp' at row 1

我在googled上搜索发现,这是因为数据库不支持utf8mb4字符,然后我在互联网上遵循了很少的教程来更新my.cnf文件并重新启动mysql服务器以及服务器。

代码语言:javascript
复制
       https://mathiasbynens.be/notes/mysql-utf8mb4

我尝试了几乎所有可能的组合,但是当我在sql中输入它时,它会抛出最大值为utf8,因为我无法插入eboji和几个4字节字符。

代码语言:javascript
复制
 Punjab me 1Train k niche 100 Sardar aa gaye..

mysql中下面命令的输出

代码语言:javascript
复制
 SHOW VARIABLES LIKE 'char%'


  character_set_client  utf8
     character_set_connection   utf8
   character_set_database   utf8mb4
    character_set_filesystem    binary
    character_set_results   utf8
   character_set_server utf8mb4
  character_set_system  utf8
     character_sets_dir /usr/share/mysql/charsets/

请指点

EN

回答 3

Database Administration用户

发布于 2015-01-15 15:56:56

您仍然将字符_设置_客户端设置为utf8

首先要确保utf8mb4的存在

代码语言:javascript
复制
mysql> select * from information_schema.character_sets where CHARACTER_SET_NAME like 'utf8%';
+--------------------+----------------------+---------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION   | MAXLEN |
+--------------------+----------------------+---------------+--------+
| utf8               | utf8_general_ci      | UTF-8 Unicode |      3 |
| utf8mb4            | utf8mb4_general_ci   | UTF-8 Unicode |      4 |
+--------------------+----------------------+---------------+--------+
2 rows in set (0.00 sec)

mysql>

您可能需要执行下列操作之一

建议#1

登录到mysql后运行此命令

代码语言:javascript
复制
mysql> set character_set_client = 'utf8mb4';
mysql> show variables like 'character_set_client';

这肯定会确保客户的会话使用utf8mb4

建议#2

使用命令行上的字符集启动mysql客户端

用这个测试它

代码语言:javascript
复制
mysql -uroot -p --default-character-set=utf8mb4 -ANe"show variables like 'character_set_client'"

它要么会回音

代码语言:javascript
复制
+----------------------+---------+
| character_set_client | utf8mb4 |
+----------------------+---------+

或

代码语言:javascript
复制
mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

如果设置了字符_设置_客户端,则运行

代码语言:javascript
复制
mysql -uroot -p --default-character-set=utf8mb4

试试看!

票数 2
EN

Database Administration用户

发布于 2019-04-22 15:16:20

需要utf8mb4字符集的常见Unicode字符是Emojis。

Utf8mb3只支持基本多语言平面中的字符。Utf8mb4支持BMP和补充字符。它要求每个多字节字符最多需要4个字节,这可能会增加您对数据存储空间的总体需求。

建议对用于存储表情符号的列使用utf8mb4。在MySQL 5.7.x和8.0.x中进行了许多性能改进。它是启动MySQL8.0.x的默认字符集。

MySQL要求您使用utf8mb4字符集来保存4字节的Unicode数据。您需要修改模式以使用utf8mb4字符集,并将LOAD data命令更改为有CHARACTER SET utf8mb4。

代码语言:javascript
复制
mysql> show global variables like’character%’;

查看当前字符值并将其更改为utf8mb4。

代码语言:javascript
复制
mysql> set global character_set_client='utf8mb4'
mysql> set global character_set_connection='utf8mb4';
mysql> set global character_set_database='utf8mb4';
mysql> set global character_set_results='utf8mb4';
mysql> set global character_set_server='utf8mb4';

注意:为了确保这些更改是永久性的,您需要更新MySQL配置,包括[client]和[mysqld]部分。

可能的问题:

在MySQL中存储表情符号时常见的问题

1)

错误代码: 1366。不正确的字符串值:列的'\xF0\x9F\x94\x8D‘。

更改需要表情符号支持的表/列,以使用正确的字符和排序规则:

代码语言:javascript
复制
ALTER TABLE <tbl_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE collation_name;

每个字符集都有一个或多个排序规则,但每个排序规则都与一个且只有一个字符集相关联。因此,请参考与您的字符集相匹配的特定排序规则类型的文档。

示例:

代码语言:javascript
复制
utf8mb4_unicode_ci;
utf8mb4_bin;

2)

错误3140 (22032):无效的JSON文本:“字符串中的无效转义字符。”

加载JSON数据时。

默认情况下,MySQL解析器将处理转义代码,因此如果您的JSON数据包含转义,则需要禁用它来处理转义。

代码语言:javascript
复制
mysql> insert into test values ('{"MN1":"\\value", "MN2": 11}');
ERROR 3140 (22032): Invalid JSON text: "Invalid escape character in string." at position 8 in value for column 'test.json'.

在这种情况下,您必须启用JSON模式,以便解析器不处理转义代码,而是允许NO_BACKSLASH_ESCAPES解析器处理它们。

如果使用LOAD DATA导入JSON,则需要将FIELDS ESCAPED BY ''添加到命令中,以便在解析导入文件时禁用转义序列处理。

3) LOAD DATA INFILE严格接受UTF8mb4字符串,抛出错误

1300:“无效的utf8mb4字符串”

问题是字符被解释为错误的字符集。客户/服务器字符集握手问题。

当插入字符串时,MySQL需要知道起始字符集。我们可以使用以下内容来指定字符集。

设置名称utf8mb4加载数据信息..。字符集utf8mb4.

这里是关于升级到MySQL5.6的一些详细信息

票数 2
EN

Database Administration用户

发布于 2019-02-14 13:40:02

这就是对我起作用的东西。在MySQL工作台中,打开表检查器,查看表的默认字符集。如果您有这个问题,可能是latin1 (即使在我的例子中它不是utf8)。在我的例子中,我不想玩配置文件等等。

所以,我做了一件简单的事!我打开了MySQL命令行并应用了下面的命令alter table,它立即工作,没有重新启动MySQL或其他任何东西。

代码语言:javascript
复制
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

注意:这将更改所有模式表的默认字符集,该字符集与输入表名称匹配。因此,您可以使用架构名称和表名,以防只针对一个模式的表。

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

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

复制
相关文章

相似问题

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