tresc
和tresc_pelna
相同类型,相同内容
The same content
。总共876
个字符。
取自...AS data_dodania, p.data_modyfikacji, p.tresc, p.tresc_pelna, p.url, count(k.id)...
Echeon到<?= strlen($post['tresc_pelna']).'----'.strlen($post['tresc']) ?>
猜猜是什么?
这是输出
876----3248
什么......?
我完全不知道这里发生了什么xD。
请帮助伙伴:D
两个字段utf8_polish_ci
和完全相同的内容
<?= mb_strlen($post['tresc_pelna'], 'utf-8').'----'.mb_strlen($post['tresc'], 'utf-8') ?>
结果还不错。
tresc
超过3千...什么......怎么样?为什么?
答案 0 :(得分:0)
MySQL有两个内置函数,用于确定可变长度项的长度。一个计算不同的unicode字符is called CHAR_LENGTH()
。另一个计算八位字节(字节),并且是called LENGTH()
。
在PHP中,strlen()
计算八位字节,例如MySQL LENGTH()
。许多unicode字符串,特别是那些在utf8中编码的字符串,每个字符的八位字节数可变。您可以use grapheme_strlen()来计算这些。
我发现有时候SELECT HEX(unicode_column)
有必要弄清楚MySQL中存在的问题。只需获取列数据就会使您受到使用的MySQL客户端的字符呈现的支配,并且可能会非常混乱。
您的数据库列也可以在其中授权数据(例如字符串é
而不是Unicode字符é
。如果该实体文本被发送到Web浏览器,它呈现为字母。
答案 1 :(得分:0)
LENGTH
和CHAR_LENGTH
之间的差异可以解释大多数欧洲文字的比率低于1.2倍。它不会解释3248:876,差不多是4倍。
也许这些都是答案的一部分:
ó
,它占用8个字节来表示2字节的utf8字符。我们无法看到其中一个是<
而另一个是<
。<p>
。同样,可能<p>
尽管如此,这还不足以解释近4倍。例如,一个简单的字母,如a
,将是一个字节,无论它是如何编码的。请为小样本提供HEX。