2016-05-06 4 views
0

Ich habe eine Tabelle in mysql für ein varchar (8000) Feld mit utf8mb4 erstellt. Hier ist der Code.mysql varchar mit utf8mb4 maximale Zeichenspeicherkapazität

CREATE TABLE `tbl_content` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `content` varchar(8000) CHARACTER SET utf8mb4 DEFAULT NULL, 
    `insdate` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

und eine gespeicherte Prozedur, um Datensätze wie folgt einzufügen.

CREATE DEFINER=`ntadmin`@`%` PROCEDURE `nsp_channeldet`(
    IN cContent VARCHAR(8000) CHARACTER SET utf8mb4 
) 
    DETERMINISTIC 
    COMMENT 'content' 
BEGIN 
    SET cContent = IF(cContent IS NOT NULL, TRIM(cContent), ""); 
    INSERT INTO tbl_content (content) 
    VALUES (cContent); 
END 

und ich rufe wie folgt.

CALL nsp_channeldet("content goes here"); 

Es funktioniert gut. Ich möchte wissen, wie Zeichen (z. B. maximale Zeichen, nicht Bytes) in dieser Spalte gespeichert werden können. Wenn ein Benutzer Inhalt in der regionalen Sprache oder Emojis eingeben, wann sollte Warnung auftreten (z. B. Daten für Spalte abgeschnitten)

Für meine Tests habe ich auf Zeichenfolge erstellt, die mir Länge 10395 zeigt. Es fügt in Tabelle ohne Warnung ein. Warum???

Hier String

ஒரு முதியவர் ஒரு.. ஹோட்டலுக்கு சாப்பிட சென்றார்..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
வெயிலில் வந்த களைப்பு.. அவர் முகத்தில் தெரிந்தது..! அவர் அங்கு ஓர் இடத்தில் அமர்ந்து சர்வரை.. அழைத்து கேட்டார்..! " தம்பி இங்கு சாப்பாடு என்ன விலை..! என்று..! 
அதற்கு சர்வர் "50 ரூபாய்" என்றான்..! 

பெரியவர் தனது சட்டை பைக்குள்.. கை விட்டு பார்த்து சர்வரிடம் கேட்டார்.. "தம்பி அதற்கும் சற்று.. குறைவாக சாப்பாடு கிடைக்காதா.."? 

சர்வர் கோபமாக "யோவ் ஏன்யா இங்க வந்து எங்க உயிர எடுக்கிறிங்க.. 

இதை விட மலிவான ஹோட்டல் எவ்வளவோ.. இருக்கு அங்க போய் தொலைங்கயா..? என்றான்..! 

பெரியவர் சொன்னார்.. "தம்பி தெரியாமல் இங்கு வந்துவிட்டேன்.. 

வெளியே வெயில் வேறு..அதிகமா இருக்கு.. நான் இனி வேறு ஹோட்டலுக்கு செல்வது சற்று சிரமம்..! என்றார்..! 

சர்வர்.. சரி..சரி எவ்வோ பணம் குறைவா வச்சுயிருக்க..! என்று கேட்டான்..! 

பெரியவர் என்னிடம் 45 ரூபாய் தான் இருக்கிறது..! என்றார்..! 

சர்வர் சரி..தருகிறேன் ஆனால் உனக்கு தயிர் இல்லை சரியா..? என்றான்..! 

பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
பெரியவர் சரி என சம்மதித்தார்..! 
சாப்பாடு கொடுத்தான்..! பெரியவர் சாப்பிட்டு விட்டு அந்த சர்வரிடம் 
50 ரூபாய் கொடுத்தார்..! 

Antwort

1

Die 8000 ist die maximale Anzahl von Zeichen , nicht Bytes.

Tamilische Zeichen sind 3 Bytes. Emojis sind 4 Bytes in utf8mb4. "Space" ist 1 Byte.

LENGTH(col) gibt die Anzahl der Bytes an. CHAR_LENGTH(col) gibt die Zeichenlänge an - dies wird in Ihrem Beispiel bei 8000 enden.

mysql> SELECT length('வெயிலில் வந்த களை'), 
      char_length('வெயிலில் வந்த களை')\G 
*************************** 1. row *************************** 
    length('வெயிலில் வந்த களை'): 47 
char_length('வெயிலில் வந்த களை'): 17 
1 row in set (0.00 sec) 
Verwandte Themen