如何在MySQL数据库中存储表情符号
我在我的项目中使用表情符号。这些字符被保存到mysql数据库中。我在如何在MySQL数据库中存储表情符号,mysql,Mysql,我在我的项目中使用表情符号。这些字符被保存到mysql数据库中。我在utf8mb4\u general\u ci中使用了数据库默认排序规则。 它显示 1366列的字符串值不正确:“\xF0\x9F\x98\x83\xF0\x9F…” 第1行的“注释” 1) 数据库:将数据库默认排序规则更改为utf8mb4 2) 表:将表排序规则更改为字符集utf8mb4 COLLATE utf8mb4\u bin 查询: ALTER TABLE Tablename CONVERT TO CHARACTER SE
utf8mb4\u general\u ci
中使用了数据库默认排序规则。
它显示
1366列的字符串值不正确:“\xF0\x9F\x98\x83\xF0\x9F…”
第1行的“注释”
1) 数据库:将数据库默认排序规则更改为utf8mb4
2) 表:将表排序规则更改为字符集utf8mb4 COLLATE utf8mb4\u bin
查询:
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
3) 代码:
插入到tablename中(第1列、第2列、第3列、第4列、第5列、第6列、第7列)
值('273','3','hdh如果您使用的是Solr+Mysql+Java,则可以使用:
这可用于:
- 案例1:当你不想改变DB时
- 案例2:当您必须将表情符号从Mysql导入Solr core时
在上述情况下,这是在系统中存储表情符号的解决方案之一
使用它的步骤:
使用的库:导入java.net.urldecker;
导入java.net.urlcoder
使用urlEncoder对带有表情符号的字符串进行编码
在不改变MysqlDB的情况下将其存储在DB中
如果需要,可以将其存储在solr core(解码形式)中,也可以存储
编码形式
当从DB或Solr core获取这些表情符号时,您现在可以对其进行解码
使用URL解码器
代码示例:
CREATE DATABASE database_name DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_unicode_ci;
导入java.net.url解码器;
导入java.net.urlcoder;
公共静态void main(字符串[]args){
//SpringApplication.run(ParticipantApplication.class,args);
System.out.println(encodeStringUrl(“我的答案只添加到Selvamani p答案中。
您可能还需要使用SET NAMES utf8mb4
更改任何SET NAMES utf8
查询。这对我起到了作用
另外,将您的网站从utf8移植到utf8mb4。特别是,本文在将索引和表转换为utf8mb4后的修复方面提出了两点优点:
索引
从utf8转换为utf8mb4时,列的最大长度
或者索引键在字节方面是不变的。因此,它更小
就字符而言,因为字符的最大长度为
现在是四个字节而不是三个。[…]InnoDB存储引擎的最大索引长度为767字节,因此对于utf8或utf8mb4列,您最多可以分别索引255或191个字符。如果当前有索引长度超过191个字符的utf8列,则在使用utf8mb4时,您需要索引较少的字符数
修复表格
升级MySQL服务器并进行必要的更改后
如上所述,请确保修复并优化所有数据库和
表。升级后我没有立即执行此操作(我不这么认为)
这是必要的,因为乍一看一切似乎都很好),而且
遇到了一些奇怪的错误,更新语句没有任何错误
效果,即使没有抛出错误
阅读本文中有关修复表的查询的详细信息。步骤1,更改数据库的默认字符集:
CREATE TABLE IF NOT EXISTS table_name (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
如果尚未创建数据库,请使用正确的编码创建:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name MODIFY field_name TEXT CHARSET utf8mb4;
步骤2,创建表时设置字符集:
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME TYPE;
或者改变桌子
ALTER TABLE messages MODIFY content BLOB;
我已经更新了我的数据库和表,从utf8升级到utf8mb4。但是对我来说没有任何效果。然后我尝试将列数据类型更新为blob,幸运的是它对我有效,数据已经保存。甚至我的数据库和表都是字符集utf8-COLLATE utf8\u unicodeT修改列的命令是:
new String((byte[]) arr)
我们需要使用type=BLOB
要修改的示例如下所示:-
mysql://USERNAME:PASSWORD@HOSTNAME:PORT/DATABASE_NAME?useUnicode=yes&characterEncoding=UTF-8
我检查了最新的mySQL和其他数据库不需要'
在表名、列名等的命令中使用
获取和保存数据:
直接将聊天内容保存到列中,若要检索数据,请从db列中提取字节数组(byte[])
,然后将其转换为字符串,例如(Java代码)
上述答案中没有提到的要点是
我们需要在连接字符串中传递带有选项的查询字符串“useUnicode=yes”
和“characterEncoding=UTF-8”
像这样的
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
数据库和表都应具有字符集utf8mb4
和排序规则utf8mb4\u unicode\u ci
创建新数据库时,应使用:
CREATE TABLE IF NOT EXISTS table_name (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
如果您有一个现有数据库,并且希望添加支持:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
您还需要为表格设置正确的字符集和排序规则:
SELECT * FROM information_schema.SCHEMATA S;
或者,如果已有包含大量数据的现有表,请进行更改:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
请注意,utf8\u general\u ci
不再是推荐的最佳实践。请参阅相关问答:
堆栈溢出。嗯,您不需要更改整个DB字符集。相反,您可以通过将列更改为blob类型来完成
ALTER TABLE messages修改内容BLOB;对具有技术堆栈的应用程序的表情符号支持-mysql、java、springboot、hibernate
在mysql中应用以下更改以获得unicode支持
alterdatabasecharacterset=utf8mb4-COLLATE=utf8mb4\uunicode\uci;
ALTER TABLE CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4\u unicode\u ci;
数据库连接-jdbc url更改:
jdbc:mysql://localhost:3306/?useUnicode=yes&characterEncoding=UTF-8
注意-如果上述步骤不起作用,请将mysql连接器版本更新为8.0.15。(mysql 5.7与连接器版本8.0.15配合使用,以获得unicode支持)对于任何试图在托管mysql实例上解决此问题的人(在
SELECT * FROM information_schema.SCHEMATA S;
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
mysql.server stop
mysql.server start
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql@5.7/5.7.29/share/mysql/charsets/ |
+--------------------------+----------------------------------------------------------+
8 rows in set (0.00 sec)
encoding: utf8mb4
collation: utf8mb4_bin
mysql -u root -p123456 my_database < profiles.sql
mysql -u root -p123456 --default-character-set=utf8mb4 my_database < profiles.sql
$this->pdo = new PDO("mysql:host=$ip;port=$port;dbname=$db;charset=utf8mb4", etc etc
mysql> CREATE DATABASE tp2;
mysql> INSERT INTO tweetsRep(username, content) VALUES ('ibrahim', 'There are two ways-->
# Way one
The simplest is to follow below steps:
Step 1:
SET NAMES utf8mb4;
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column column VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;