列上的mysql最大长度并确保我没有使用utf8_unicode_ci - PHP来超过这个限制?

时间:2012-06-13 05:07:46

标签: php mysql string text unicode

我在mysql中使用TEXTut8_unicode_ci来存储从互联网上删除的一些数据。

收集的文本来自不同语言的各种网站。

我对65535列的TEXT字节的最大长度感到困惑。

如何检查我插入列中的字符串是否超过该限制?

我正在使用strlen($str)来检查字符串的长度,但是通过使用它确保数据不会被截断以适应列,因为我理解{{1}每个字符可以超过1个字节吗?

2 个答案:

答案 0 :(得分:3)

编辑: OP可以简单地使用strlen(),因为它返回字节,而不是字符。证人:

$ cat test.php
#!/usr/bin/php -q
<?php
echo strlen("דותן כהן")."\n";
echo mb_strlen("דותן כהן", "UTF-8")."\n";
?>

$ ./test.php 
15
8

在此帖子的评论中,信用转到deceze

以下老帖子:

PHP手册的注释为a handy function for determining how many bytes are in a string。它似乎是使用MYSQL built in functions such as LENGTH to do the job的唯一选择,这在这里很麻烦。

还有另外两种可能的解决方法。首先,您可以将字符串写入文件并检查文件的大小。其次,您可以在mb_strlen上强制执行A​​SCII编码,然后将每个字节视为一个字符,因此返回的字符数实际上是字节数。我没有测试过,所以先检查一下。让我们知道什么对你有用!

答案 1 :(得分:0)

结帐MySQL函数LENGTH():

  

返回字符串str的长度,以字节为单位。一个多字节   字符计为多个字节。这意味着对于一个字符串   包含五个双字节字符,LENGTH()返回10,而   CHAR_LENGTH()返回5.