【问题标题】:mysql varchar with utf8mb4 maximum character storing capacity具有utf8mb4最大字符存储容量的mysql varchar
【发布时间】:2016-05-06 07:27:00
【问题描述】:

我在 mysql 中为一个带有 utf8mb4 的 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 ரூபாய் கொடுத்தார்..!

【问题讨论】:

    标签: php mysql database utf-8


    【解决方案1】:

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

    泰米尔语字符为 3 个字节。表情符号是 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)
    

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多