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
in /etc/my.cnf Herausgegeben
[mysqld]
Charakter-set-server = utf8mb4
Kollatierungsname server = utf8mb4_unicode_ciBearbeitete 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;
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.