最近,我在mysql数据库中插入emoji和其他4个字节字符时遇到了问题,然后我发现我的mysql版本是5.1,它不支持utf8mb4,所以我升级到MySQL5.6,它支持utf8mb4,在我的排序规则中,我可以选择utf8mb4。但是当我尝试通过phpmyadmin直接插入表行时,我也会得到这个错误引用这个链接。
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服务器以及服务器。
https://mathiasbynens.be/notes/mysql-utf8mb4我尝试了几乎所有可能的组合,但是当我在sql中输入它时,它会抛出最大值为utf8,因为我无法插入eboji和几个4字节字符。
Punjab me 1Train k niche 100 Sardar aa gaye..mysql中下面命令的输出
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/请指点
发布于 2015-01-15 15:56:56
您仍然将字符_设置_客户端设置为utf8
首先要确保utf8mb4的存在
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>您可能需要执行下列操作之一
登录到mysql后运行此命令
mysql> set character_set_client = 'utf8mb4';
mysql> show variables like 'character_set_client';这肯定会确保客户的会话使用utf8mb4
使用命令行上的字符集启动mysql客户端
用这个测试它
mysql -uroot -p --default-character-set=utf8mb4 -ANe"show variables like 'character_set_client'"它要么会回音
+----------------------+---------+
| character_set_client | utf8mb4 |
+----------------------+---------+或
mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file如果设置了字符_设置_客户端,则运行
mysql -uroot -p --default-character-set=utf8mb4发布于 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。
mysql> show global variables like’character%’;查看当前字符值并将其更改为utf8mb4。
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‘。
更改需要表情符号支持的表/列,以使用正确的字符和排序规则:
ALTER TABLE <tbl_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE collation_name;每个字符集都有一个或多个排序规则,但每个排序规则都与一个且只有一个字符集相关联。因此,请参考与您的字符集相匹配的特定排序规则类型的文档。
示例:
utf8mb4_unicode_ci;
utf8mb4_bin;2)
错误3140 (22032):无效的JSON文本:“字符串中的无效转义字符。”
加载JSON数据时。
默认情况下,MySQL解析器将处理转义代码,因此如果您的JSON数据包含转义,则需要禁用它来处理转义。
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.
发布于 2019-02-14 13:40:02
这就是对我起作用的东西。在MySQL工作台中,打开表检查器,查看表的默认字符集。如果您有这个问题,可能是latin1 (即使在我的例子中它不是utf8)。在我的例子中,我不想玩配置文件等等。
所以,我做了一件简单的事!我打开了MySQL命令行并应用了下面的命令alter table,它立即工作,没有重新启动MySQL或其他任何东西。
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;注意:这将更改所有模式表的默认字符集,该字符集与输入表名称匹配。因此,您可以使用架构名称和表名,以防只针对一个模式的表。
https://dba.stackexchange.com/questions/89355
复制相似问题