How to store Emoji Character in MySQL Database

后端 未结 16 2004
迷失自我
迷失自我 2020-11-22 05:34

I am using Emoji character in my project. That characters are saved (??) into mysql database. I had used database Default collation in utf8mb4_general_ci. It sh

相关标签:
16条回答
  • 2020-11-22 06:14

    Well, you need not to change the Whole DB Charset. Instead of that you can do it by changing column to blob type.

    ALTER TABLE messages MODIFY content BLOB;

    0 讨论(0)
  • 2020-11-22 06:18

    If you are using Solr + Mysql + Java, you can use:

    This can be Used :

    • case1: When you don`t want to alter DB.
    • case2: when you have to import emoticons from your Mysql to Solr core.

    In above case this is one of the solutions to store your emoticons in your system.

    Steps to use it:

    Library used: import java.net.URLDecoder; import java.net.URLEncoder;

    1. Use urlEncoder to encode your String having emoticons.
    2. Store it in DB without altering the MysqlDB.
    3. You can store it in solr core(decoded form)if you want or you can store encoded form.
    4. When fetching these emoticons from DB or Solr core you can now decode it Using urlDecoder.

    Code example:

    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    public static void main(String[] args) {
        //SpringApplication.run(ParticipantApplication.class, args);
        System.out.println(encodeStringUrl("                                                                    
    0 讨论(0)
  • 2020-11-22 06:19

    The command to modify the column is:

    ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME TYPE;
    

    And we need to use type = BLOB

    Example to modify is as under:-

    ALTER TABLE messages MODIFY content BLOB;
    

    I checked that latest mySQL and other databases don't need '' to use in command on table_name, column_name etc.

    Fetch and Save data: Directly save the chat content to column and to retrieve data, fetch data as byte array (byte[]) from db column and then convert it to string e.g. (Java code)

    new String((byte[]) arr) 
    
    0 讨论(0)
  • 2020-11-22 06:24

    Hi my friends This is how I solved this problem and I was happy to teach it to you as well I am in the Android application I encrypt a string containing text and emoj and send it to the server and save it in the mysql table and after receiving it from the server I decrypt it and display it in the textview. encoded and decoded my message before request and after response: I send Android app messages to mysql via pdo through this method and receive them with pdo. And I have no problem. I think it was a good way. Please like Thankful

     
     public void main()
     {
        String message="hi mester ali moradi                                                                     
    0 讨论(0)
  • 2020-11-22 06:27

    Both the databases and tables should have character set utf8mb4 and collation utf8mb4_unicode_ci.

    When creating a new database you should use:

    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    If you have an existing database and you want to add support:

    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    

    You also need to set the correct character set and collation for your tables:

    CREATE TABLE IF NOT EXISTS table_name (
        ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    or change it if you've got existing tables with a lot of data:

    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    Note that utf8_general_ci is no longer recommended best practice. See the related Q & A:

    What's the difference between utf8_general_ci and utf8_unicode_ci on Stack Overflow.

    0 讨论(0)
  • 2020-11-22 06:28

    My answer only adds to Selvamani P answer.

    You might also need to change any SET NAMES utf8 queries with SET NAMES utf8mb4. That did the trick for me.

    Also, this is a great article to port your website from utf8 to utf8mb4. In particular the article makes 2 good points on indexes and repairing tables after converting them to utf8mb4:

    INDEXES

    When converting from utf8 to utf8mb4, the maximum length of a column or index key is unchanged in terms of bytes. Therefore, it is smaller in terms of characters, because the maximum length of a character is now four bytes instead of three. [...] The InnoDB storage engine has a maximum index length of 767 bytes, so for utf8 or utf8mb4 columns, you can index a maximum of 255 or 191 characters, respectively. If you currently have utf8 columns with indexes longer than 191 characters, you will need to index a smaller number of characters when using utf8mb4.

    REPAIRING TABLES

    After upgrading the MySQL server and making the necessary changes explained above, make sure to repair and optimize all databases and tables. I didn’t do this right away after upgrading (I didn’t think it was necessary, as everything seemed to work fine at first glance), and ran into some weird bugs where UPDATE statements didn’t have any effect, even though no errors were thrown.

    Read more about the queries to repair tables on the article.

    0 讨论(0)
提交回复
热议问题