2012-06-13 15 views
5

Internet üzerinden alıntılanan bazı verileri depolamak için mysql içinde ut8_unicode_ci olan TEXT sütun kullanıyorum. MySQL maksimum sütunlarda uzunluğu ve utf8_unicode_ci kullanarak bunu limitin üzerinde gitmez sağlanması - PHP?

Toplanan metinler farklı dillerde çeşitli sitelerden.

TEXT sütunu için 65535 bayt uzunluğunda karıştırıyorum.

Sütuna eklediğim dizelerin o sınırı aşmadığını nasıl kontrol edebilirim? Ben dizeleri uzunluğunu kontrol etmek strlen($str) kullanıyorum dakikada

ama veri ı utf8_unicode_ci 1'den fazla bayt olabileceğini anlıyoruz olarak sütuna sığacak şekilde kesildi olmayacak emin olun gelmez bu kullanarak karakter başına

+0

¿siz) (Yukarý kullanarak denediniz mi? http://php.net/manual/es/function.mb-strlen.php –

+0

Evet ama her durumda 'mb_strlen ($ str)! = strlen ($ str) '' strlen' den gerçek sonuç daha fazla 'mb_strlen' den, ve' mb_strlen' sonucu 1 – hadley

+0

olarak çok baytlı karakterleri sayar. Bu bir çözüm değildir, ancak alanınız tükeniyorsa MEDIUMTEXT (16777215 chars) veya LONGTEXT (4294967295 chars) ile çıkabilirsiniz. sadece TEXT. Aslında yapmanız gereken – AleksanderKseniya

cevap

3

DÜZENLEME: bu bayt geri döner OP sadece, strlen() değil kullanabilir karakter. Tanık:

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

$ ./test.php 
15 
8 

Kredi Bu yayına yorumunda deceze gider. Aşağıda

Eski mesaj: PHP kılavuzun

notlar a handy function for determining how many bytes are in a string var. Burada hantal olurdu MYSQL built in functions such as LENGTH to do the job kullanmanın tek alternatif gibi görünüyor.

Diğer iki olası geçici çözüm vardır. İlk olarak, dizeyi bir dosyaya yazıp dosyanın boyutunu kontrol edebilirsiniz. İkincisi, Yukarý üzerinde ASCII kodlama zorlayabilir ve o zaman bir karakter olarak her byte, bu yüzden aslında byte miktarıdır döndürür karakter miktarını ele alacağız. Bunu test etmedim, önce kontrol et. Sizin için neyin işe yaradığını bize bildirin!

+0

[ 'strlen'] (http://php.net/strlen), dönem kullanmaktır. Dizeyi bir dosyaya yazmak ve boyutlarını kontrol etmek, sadece bayt saymayı gerektiren strlen işlevini kullanmakla aynıdır. – deceze

+0

'strlen', baytları sayar. Bir baytın bir karaktere eşit olduğunu varsayan saf PHP temel işlevlerinden biridir. strlen ('漢') '3'ü döndürür, çünkü baytları sayar, mb_strlen ('漢', 'UTF-8') doğru karakterleri sayar ve' 1' döndürür. – deceze

+0

@deceze: Haklısınız. Sadece test 'strlen ("דותן כהן")' ve 'Yukarý ("דותן כהן", "UTF-8")'. Eski baskılar 15, ikinci baskılar 8. Çok teşekkür ederim! – dotancohen

0

Ödeme MySQL fonksiyonu UZUNLUĞU():

bayt cinsinden ölçülür string str uzunluğunu verir. Çok baytlı bir karakteri, birden çok bayt olarak sayılır. Bu, beş, iki baytlık karakterleri içeren bir dizi için, uzunluk() CHAR_LENGTH() döndürür iken, 10 döner anlamına gelir 5.

İlgili konular