5

インターネット経由でスクレイピングされたデータを格納するために、mysql にあるTEXT列を使用しています。ut8_unicode_ci

収集されたテキストは、さまざまな言語のさまざまなサイトからのものです。

65535列の最大バイト長と混同していTEXTます。

列に挿入する文字列がその制限を超えていないことを確認するにはどうすればよいですか?

現時点では、文字列の長さを確認するために使用していますが、これを使用することで、1 文字あたり 1 バイトを超える可能性があることstrlen($str)を理解しているため、データが列に収まるように切り捨てられないようにしますか?utf8_unicode_ci

4

2 に答える 2

3

編集: OPはstrlen()、文字ではなくバイトを返すため、単純に使用できます。目撃者:

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

$ ./test.php 
15
8

クレジットは、この投稿へのコメントに記載されています。

以下の古い投稿:

PHP マニュアルのメモには、文字列内のバイト数を判断するための便利な関数があります。ここでは面倒な仕事をするなど、MYSQL組み込み関数LENGTHを使用する唯一の代替手段のようです。

他に考えられる回避策が 2 つあります。まず、文字列をファイルに書き込み、ファイルのサイズを確認できます。次に、mb_strlen で ASCII エンコーディングを強制すると、各バイトが文字として扱われるため、返される文字数は実際にはバイト数になります。私はこれをテストしていないので、最初に確認してください。あなたに合ったものを教えてください!

于 2012-06-13T12:05:28.007 に答える
0

MySQL 関数 LENGTH() をチェックアウトします。

文字列 str の長さをバイト単位で返します。マルチバイト文字は複数バイトとしてカウントされます。つまり、5 つの 2 バイト文字を含む文字列の場合、LENGTH() は 10 を返しますが、CHAR_LENGTH() は 5 を返します。

于 2012-06-13T08:54:25.543 に答える