|
+underlined text+
> show variables like "char%";
|
+--------------------------+------------------------------+
|
| Variable_name | Value |
|
+--------------------------+------------------------------+
|
| character_set_client | utf8mb4 |
|
| character_set_connection | utf8mb4 |
|
| character_set_database | utf8mb4 |
|
| character_set_filesystem | binary |
|
| character_set_results | utf8mb4 |
|
| character_set_server | utf8mb4 |
|
| character_set_system | utf8 |
|
| character_sets_dir | /usr/share/mariadb/charsets/ |
|
+--------------------------+------------------------------+
|
ö in the terminal should be in UTF-8:
$ echo -n "ö" | od -c
|
0000000 303 266
|
0000002
|
JSON_SET with only one pair of arguments works fine
$ mysql -N -e "SELECT JSON_SET('{}', '$.a', 'ö');" | od -c
|
0000000 { " a " : " 303 266 " } \n
|
0000014
|
with two pairs the second unicode character produces a LATIN1 ö
$ mysql -N -e "SELECT JSON_SET('{}', '$.a', 'ö', '$.b', 'ö');" | od -c
|
0000000 { " a " : " 303 266 " , " b " :
|
0000020 " 366 " } \n
|
0000026
|
which results into this
> SELECT JSON_SET('{}', '$.a', 'ö', '$.b', 'ö', '$.c', 1);
|
+----------------------------------------------------+
|
| JSON_SET('{}', '$.a', 'ö', '$.b', 'ö', '$.c', 1) |
|
+----------------------------------------------------+
|
| NULL |
|
+----------------------------------------------------+
|
1 row in set, 1 warning (0.00 sec)
|
|
> show warnings;
|
+---------+------+------------------------------------------------------------------------+
|
| Level | Code | Message |
|
+---------+------+------------------------------------------------------------------------+
|
| Warning | 4035 | Broken JSON string in argument 1 to function 'json_set' at position 16 |
|
+---------+------+------------------------------------------------------------------------+
|
1 row in set (0.00 sec)
|
however if we only use special unicode characters every second pair
> SELECT JSON_SET('{}', '$.a', 'ö', '$.c', 1, '$.b', 'ö');
|
+----------------------------------------------------+
|
| JSON_SET('{}', '$.a', 'ö', '$.c', 1, '$.b', 'ö') |
|
+----------------------------------------------------+
|
| {"a": "ö", "c": 1, "b": "ö"} |
|
+----------------------------------------------------+
|
1 row in set (0.00 sec)
|
something similar happens with mb4 characters (example with U+1F62B TIRED FACE, JIRA doesn't handle those characters as well so i replaced it with XXXX)
$ echo -n "XXXX" | od -c
|
0000000 360 237 230 253
|
0000004
|
$ mysql -N -e "SELECT JSON_SET('{}', '$.a', 'XXXX');" | od -c
|
0000000 { " a " : " 360 237 230 253 " } \n
|
0000016
|
however
> SELECT JSON_SET('{}', '$.a', 'XXXX', '$.b', 'XXXX');
|
+----------------------------------------+
|
| JSON_SET('{}', '$.a', '?', '$.b', '?') |
|
+----------------------------------------+
|
| NULL |
|
+----------------------------------------+
|
1 row in set, 1 warning (0.00 sec)
|
|
> show warnings;
|
+---------+------+-------------------------------------------------------------------------------+
|
| Level | Code | Message |
|
+---------+------+-------------------------------------------------------------------------------+
|
| Warning | 4038 | Syntax error in JSON text in argument 1 to function 'json_set' at position 24 |
|
+---------+------+-------------------------------------------------------------------------------+
|
1 row in set (0.00 sec)
|
|
> SELECT JSON_SET('{}', '$.a', 'XXXX', '$.b', 1, '$.c', 'XXXX');
|
+--------------------------------------------------+
|
| JSON_SET('{}', '$.a', '?', '$.b', 1, '$.c', '?') |
|
+--------------------------------------------------+
|
| {"a": "XXXX", "b": 1, "c": "XXXX"} |
|
+--------------------------------------------------+
|
1 row in set (0.00 sec)
|
|