2016-08-31 4 views
1

동적 컬럼이있는 mariadb utf8mb4에 대해 두 가지 질문이 있습니다.동적 컬럼 및 프로 시저가있는 mariadb utf8mb4

무엇보다도 나는 mariadb 버전 10.0을 사용하고 jdbc로 연결합니다.

  1. 가 편집 것을 따를 이모티콘 문자를 저장하기 위해, 내가 mariadb를 수정 /etc/my.cnf에

    [mysqld를]
    문자 집합 서버 = utf8mb4
    정렬 서버 = utf8mb4_unicode_ci

  2. 수정 된 DB 테이블 문자 집합.

 
    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; 

JDBC 문자열

에서 삭제 입자
  • 제거 characterEncoding 매개 변수

      을 : characterEncoding = UTF-8

    그래서, 그것은 완벽을, 이모 지형 문자는 varchar 열에 ㅁ ccurately 저장되었습니다. 그러나 역동적 인 칼럼에서는 그렇지 않습니다. Ad-Hoc 쿼리 및 절차에서 column_create()는 그림 이모티 대신 물음표를 저장합니다.

    다음 절차 샘플을 따르십시오.

    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 
    

    절차 결과 : { 'title', '?????'}.

    그리고 임시 쿼리에서

    ,

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

    결과 : 테스트 '|| {\ "name \": \ "test ???? \"}

    결과 열은 정확하지만 column_json no입니다.

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

    결과 : 테스트 || {\ "name \": \ "test \"}

    이유를 모르겠습니다. 도와주세요, 제발.

  • 답변

    1

    sso_json blob은 테이블의 DEFAULT CHARACTER SET utf8을 획득합니다. name처럼 그림 이모티콘으로는 utf8mb4이 필요합니다.

    관련 문제