2016-08-31 2 views
1

Ich habe zwei Fragen für mariab utf8mb4 mit dynamischen Spalte.Mariadb utf8mb4 mit dynamischer Spalte & Verfahren

Vor allem verwende ich Mariadb Version 10.0 und verbinden Sie mit jdbc. Für Emoji-Zeichen zu speichern, ich MariaDB modifiziert, wie folgt, dass

  1. in /etc/my.cnf Herausgegeben

    [mysqld]
    Charakter-set-server = utf8mb4
    Kollatierungsname server = utf8mb4_unicode_ci

  2. Bearbeitete DB Tabelle Charset.

 
    CREATE TABLE `MEMBER` (
     `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
     `regdate` datetime DEFAULT NULL, 
     `sso_json` blob, 
     ..(skip).. 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
  1. Remove characteren Parameter von JDBC-String

    gelöscht Partikel: characteren = utf-8

Also, es ist perfekt, Emoji-Zeichen wurden in einer varchar-Spalte gespeichert. Aber nicht in einer dynamischen Spalte. In der Ad-hoc-Abfrage und in der Prozedur speichert column_create() das Fragezeichen anstelle von Emoji.

Wie folgt, Prozedurbeispiel.

CREATE DEFINER=`sample`@`%` PROCEDURE `SP_INSERT`(
    inName varchar(500) CHARACTER SET utf8mb4 
) 
BEGIN 

    SET @pSql = CONCAT(' INSERT INTO SAMPLE_TBL (' 
         , ' name, sso_json ' 
         , ') VALUES (' 
         , ' ?, COLUMN_CREATE(?, ?) ' 
         , ') ' 
        ); 


    -- variables bind 
    SET @pName = inName; 
    SET @pKey = 'title';   

    -- prepare stmt 
    PREPARE pstmt FROM @pSql; 
    EXECUTE pstmt USING @pName, @pKey, @pName; 

END 

Prozedur Ergebnis: {'title', '?????'}.

Und in einer Ad-hoc-Abfrage,

set names utf8mb4 collate 'utf8mb4_unicode_ci'; 
select 'test', column_json(column_create('name','test')); 

Ergebnis: test‘|| {\ "Name \": \ "Test ???? \"}

Ergebnis Spalte ist genau, aber column_json nicht.

set names utf8; 
select 'test', column_json(column_create('name','test')); 

Ergebnis: Test || {\ "name \": \ "test \"}

Ich weiß nicht warum. Hilf mir bitte.

Antwort

1

sso_json blob erfasst die Tabelle DEFAULT CHARACTER SET utf8; Sie benötigen utf8mb4 für Emoji, wie Sie mit name getan haben.

Verwandte Themen