mysql varchar与utf8mb4最大字符存储容量

时间:2016-05-06 07:27:01

标签: php mysql database utf-8

我使用utf8mb4在mysql中为一个varchar(8000)字段创建了一个表。这是代码。

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;

和一个存储过程,用于在其中插入记录,如下所示。

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

我打电话如下。

CALL nsp_channeldet("content goes here");

它工作正常。我想知道如何在此列中存储字符(例如,最大字符数而不是字节数)。如果某些用户以区域语言或表情符号输入内容,应何时发生警告(例如,列中的数据被截断)

对于我的测试,我创建了字符串,显示我的长度为10395.它在表中插入而没有任何警告。为什么???

这是字符串

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

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

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

8000是字符的最大数量,而不是字节

泰米尔语字符是3个字节。 Emojis是utf8mb4中的4个字节。 "空间"是1个字节。

LENGTH(col)给出字节数。 CHAR_LENGTH(col)给出字符长度 - 在您的示例中,这将超过8000。

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