Php 正在计算MySQL数据库的Unicode字符数

Php 正在计算MySQL数据库的Unicode字符数,php,mysql,unicode,Php,Mysql,Unicode,在PHP中,当变量包含Unicode字符时,我是否需要担心将其存储在MySQL数据库中 假设我有变量值DejanČolic,我想Unicode字符将使用2个字符(或者4个,我不确定)。然后,我的变量在数据库中的长度将是13/17个字符,而不是首先指定的11个字符。我说得对吗 如果我是对的,是否有一些PHP函数可以帮助计算未来的Unicode字符,以便我能够进行适当的数据验证?谢谢。PHP: MySQL:字符是字符。11个字符是11个字符,与环境无关。如果MySQL不知道您给它的是UTF-8编码的

在PHP中,当变量包含Unicode字符时,我是否需要担心将其存储在MySQL数据库中

假设我有变量值
DejanČolic
,我想Unicode字符将使用2个字符(或者4个,我不确定)。然后,我的变量在数据库中的长度将是13/17个字符,而不是首先指定的11个字符。我说得对吗

如果我是对的,是否有一些PHP函数可以帮助计算未来的Unicode字符,以便我能够进行适当的数据验证?谢谢。

PHP:

MySQL:

字符是字符。11个字符是11个字符,与环境无关。如果MySQL不知道您给它的是UTF-8编码的数据,它可能会误解字节,并根据错误编码的假设推导出不同的字符计数。但是如果MySQL知道正确的编码,它将是11个字符


虽然会有更多的字节,但MySQL中的字节会更多,因为MySQL存储UTF-8数据的效率非常低。

一篇关于Unicode的有趣文章(最好在安装了字体的Firefox上查看)Unicode字符长度可变,因此可以有1到4个字节(尽管UTF-8最多允许6个字节/字符)在我的测试中,
mb_strlen()
strlen()
给出了相同的结果。有什么区别吗?strlen()是哑的,可以计算字节数。mb_strlen支持unicode,并对字符进行计数。如果您正在处理ascii字符串,那么它们是相同的。否则strlen将过度计数。那么,
strlen()。我说的对吗?MySQL将以您在表中指定的任何字符集/排序规则存储数据。我的测试结果是21和11?(使用GET上的
strlen()
mb_strlen()
)@Dejan哪个编码是文本,而
mb_strlen
认为文本是哪个编码?请尝试
mb_strlen
@Dejan BTW的第二个
$encoding
参数,阅读此内容可能有助于了解主题:我进行了更正并添加了标题。对于
utf-8
有结果13和11(对于
DejanČolic
Dejan Colic
)。我想
mb_strlen
认为它是
utf-8
Č
=U+010C和
ć
=U+0107=都是2字节的图表,所以你的strlen=13/mb_strlen=11非常准确。