【发布时间】:2017-01-07 22:12:27
【问题描述】:
我有两个关于动态列的 mariadb utf8mb4 问题。
首先,我使用 mariadb 10.0 版并通过 jdbc 连接。 为了保存 emoji 字符,我将 mariadb 修改如下,
-
在 /etc/my.cnf 中编辑
[mysqld]
字符集服务器 = utf8mb4
排序服务器 = utf8mb4_unicode_ci 已编辑 DB 表字符集。
-
从 JDBC 字符串中移除 characterEncoding 参数
删除的粒子:characterEncoding=utf-8
所以,很完美,表情符号字符被准确地保存在 varchar 列中ㅁ。但不在动态列中。在 Ad-Hoc Query 和过程中,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', '?????'}。
并且在 Ad-Hoc 查询中,
set names utf8mb4 collate 'utf8mb4_unicode_ci';
select 'test????????????????', column_json(column_create('name','test????????????????'));
结果: 测试????????????????' || {\"名称\":\"测试??????\"}
结果列是准确的,但 column_json 没有。
set names utf8;
select 'test????????????????', column_json(column_create('name','test????????????????'));
结果: 测试???????????????? || {\"名称\":\"测试????????????????\"}
我不知道为什么。请帮帮我。
【问题讨论】: