Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL数据库中存储表情符号_Mysql - Fatal编程技术网

如何在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

我在我的项目中使用表情符号。这些字符被保存到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 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;