我想知道:假设一切都设置正确,这意味着一个带有字符集的列utf8mb4
和一个连接到数据库的客户端将连接编码设置为utf8mb4
,是否有任何方法可以让所述客户端SELECT
获取包含无效 UTF-8 字节序列的数据?有什么方法可以将数据插入utf8mb4
实际上不是有效 UTF-8 的列中吗?
换句话说:假设SELECT
通过客户端连接设置为 ing 任何非二进制列utf8mb4
应该始终返回有效的 UTF-8 字节序列是否合理?
(让我们假设SELECT *
没有任何CAST
恶作剧之类的简单陈述。)
我不这么认为。但我已经接近:
通过从 开始
BINARY
,然后转换为CHAR
,我可以将无效数据放入列中。但是,ALTER
当我尝试转换它时会发出警告。请注意,在最后
SELECT
,数据被截断了。截断发生在ALTER
,而不是SELECT
,您的问题希望它发生的地方。这可以通过转换回来验证BINARY
:如果您看到问题发生,请提供详细信息;也许我可以剖析这个问题。
好的,欢迎您帮助我理解问题......在引用的线程中,数据来自 html 表单字段,并且被插入到准备好的字段中。插入后没有数据转换!首先,它发生的原因:Javascript 试图将字符串 U+1F601 解释为“微笑的眼睛”的 unicode 字符的表达式。我必须没有留下任何细节,但错误是“A”的附录,所以 U+1F601A 被解释了。在测试代理对的字符的代码部分之后;留下了“\udf98\udc1a”。现在看下面的代码,它创建了一个新的空表,插入了文本区域的值。