问题标签 [utf8mb4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 从 MySql 使用 perl 获取 utf8mb4 字符串的长度
我写了一个小的 perl 函数,它接受一个字符串并检查它的长度,没有空格。基本代码如下所示:
当我为这个函数提供一个包含特殊字符(如希伯来字母)的字符串时,它似乎工作得很好。当我使用来自 MySql 列的值,字符集为 utf8mb4 时,问题就开始了:在这种情况下,计算的值高于上一个示例中的值。
我可以猜到为什么会发生这种行为:特殊字符以 4 字节的方式写入表中,因此每个字母在 utf8 编码中计算为两个字符。
有谁知道如何解决上述问题,以便我从来自定义为 utf8mb4 的 DB 表的字符串中获得正确数量的字符?
编辑:
有关上述代码的更多信息:
用作函数参数的 DB 列是 VARCHAR(1000) 类型,排序规则为 utf8mb4_unicode_ci。我通过如下配置的 MySql 连接获取行:
示例数据值为“שלום עולם”(在希伯来语中意为“Hello World”)。
1) 调用时foo($request->{VALUE});
(其中 VALUE 为 DB 中的列数据),结果为 16(其中每个希伯来字符计为两个字符,忽略它们之间的一个空格)。在这种情况下,Dumper 是:
2)打电话时foo("שלום עולם");
:
声明时
use utf8;
,结果为 8(因为此字符串中有 8 个可见字符)。在这种情况下,Dumper (Useqq=1) 是:$VAR1 = "\x{5e9}\x{5dc}\x{5d5}\x{5dd}\x{5e2}\x{5d5}\x{5dc}\x{5dd}";
不声明 `use utf8;' 时,结果为 16,类似于从 DB 发送值的情况:
$VAR1 = "\327\251\327\234\327\225\327\235\327\242\327\225\327\234\327\235";
看起来我需要在开始使用它之前找到一种将接收到的值转换为 UTF8 的方法。
mysql - 表情符号未正确存储在 MySQL 5.6 中,排序规则为 utf8mb4
我正在尝试将表情符号存储到我服务器中的数据库中。我使用 AWS EC2 实例作为服务器,我的服务器详细信息如下:
操作系统:ubuntu0.14.04.1
MySQL 版本:5.6.19-0ubuntu0.14.04.1 - (Ubuntu)
数据库客户端版本:libmysql - mysqlnd 5.0.11-dev - 20120503
我使用以下 SQL 在服务器中创建了一个数据库测试和表表情符号:
当我尝试执行以下插入时,出现警告并且数据未正确存储:
插入的行 ID:3
警告:#1366 不正确的字符串值:'\xF0\x9F\x91\x86 \xF0...' 用于第 1 行的列 'text'
文本列中存储的值为:???? ?????????
相同的场景适用于我的本地数据库,并且值已正确存储。除了操作系统(Windows)之外,我本地的几乎所有配置都相似。
c# - 如何删除字符串中的任何 utf8mb4 字符
使用 C# 如何从字符串中删除 utf8mb4 字符(表情符号等),以便结果完全符合 utf8。
大多数解决方案都涉及更改数据库配置,但不幸的是我没有这种可能性。
javascript - 如何在php和js中获取使用utf8mb4编码的字符长度
我使用支持utf8mb4
存储 emoji 的 mysql,但是在 php 或 js 端,我无法获得它们的正确长度,这是我的 textarea 输入 maxlength 的功能。
据我所知,php或web端不支持utf8mb4。有人知道怎么做吗?
我只是在js端得到一个js来解决它,这是由twitter支持的! 见twitter-text-js
但是如何在 php 端制作它,我没有找到新的 twitter-text-php?我也找到了这个答案,但是如何使用呢?
mysql - MySql 为表情符号字符串返回错误的结果
我的数据库、表、字段都使用 utf8mb4。我可以很好地将表情符号存储到某些字段中。现在我尝试查询,例如:
SELECT * FROM user
WHERE 名称=''
令人惊讶的是,结果是字段名称不同的记录,例如 ''
看起来 mysql 通过长度而不是内容来匹配表情符号字符串。
有什么想法可以解决这个问题吗?非常感谢。
php - 带有来自 utf8mb4 的 iconv 的 FPDF
我有一个来自 MySql DB 的字符串,用 utf8mb4 编码。我正在为 PHP 渲染一个带有 FPDF 的 pdf,并尝试使用 iconv 对其进行转换:
这无法告诉我“注意:iconv():错误的字符集,utf8mb4' to
不允许从 cp1252' 进行转换”。如果我尝试
我收到“通知:iconv():在输入字符串中检测到非法字符”。
如果没有 iconv,我会得到多个 ascii 字符来代替特殊字符,这并不好。
有没有办法正确输出这个值?
java - Mysql JDBC 不正确的字符串值和“?” 字符编码
我同时有 2 个问题,我解决了它们,但是当我修复其中一个问题时,另一个问题再次出现,其中一个是我插入一些句子时的字符编码,db 将Ş,İ,ş,ı字符显示为“ ?” 我解决了这个问题,把useUnicode=yes&characterEncoding=utf8
但我的第二个问题,
当我删除characterEncoding=utf8时,问题已解决,但我的第一个问题再次出现。
顺便说一下,我将 db 字符组更改为utf8mb4_general_ci
有什么想法吗?
mysql - MySQL 可以选择 litral emoji 但不会将 emoji 存储到表中
我正在尝试将一些表情符号字符插入 MySQL 中的表中,但值存储为问号 (????)。
我确保使用正确的utf8mb4
编码创建数据库:
然后我试图确定MySql是否理解表情符号,所以我这样做了:
然后我这样做了:
我不知道该怎么做才能解决这个问题。。
** 编辑 ** :按照评论中的要求,我运行了以下命令:
python - 使用 SQLAlchemy 和 pymysql,如何设置连接以使用 utf8mb4?
我发现(很难)MySQL 的 UTF8 字符集只有 3 个字节。一些研究表明,我可以通过更改表以利用utf8mb4
排序规则并获得完整的 4 字节 UTF 来解决此问题。
我已经这样做了。我的数据库、表和列都已被ALTER
编辑为使用此字符集。但是,如果我的数据的 unicode 代码点大于 U+FFFF,我仍然会收到此消息:
我发现我有以下设置:
collation_server
是通过对 进行更改来设置的my.cnf
。我的问题是如何更改连接?我目前使用 SQL Alchemy 和 pymysql 连接到数据库,如下所示:
通过 SQL Alchemy 连接时,utf8_general_ci
我可以做些什么来更改 from ?utf8mb4_general_ci