varchar(N)和char(N)中的N解析

"[email protected]:mysql6666.sock  [china]>show create table a1;

+-------+-----------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                  |

+-------+-----------------------------------------------------------------------------------------------+

| a1    | CREATE TABLE `a1` (

`name` varchar(21844) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+-------------------------------------

varchar(N) 类型支持的最大字节长度是65535,65535-2-1=65532(最大支持65532字节),2是标识位,1标识null。

(N)代表的是字符个数,不是字节大小。

utf-8 占3个字节,能够存储65532/3=21844.个字符。如果设置21845则会报错提示行数据大小超限制。

"[email protected]:mysql6666.sock  [china]>create table a3 (name varchar(21845) not null);

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

=================================================================================================================

1个汉字占3个字符,1个英文字母或者数字占1个字符。

select length(X)统计字符占的大小。

*************************** 3. row ***************************

length(name): 1

name: d

*************************** 4. row ***************************

length(name): 3

name: 我

--------------------------------------------------------------------------

select char_length(X) 统计的是字符的个数。

*************************** 3. row ***************************

char_length(name): 1

name: d

*************************** 4. row ***************************

char_length(name): 1

name: 我

4 rows in set (0.00 sec)

"[email protected]:mysql6666.sock  [china]>select length(name) from a1;

+--------------+

| length(name) |

+--------------+

|        21844 |

|        21844 |

|            1 |

|            3 |

+--------------+

=====================================================================================================

char(N) N代表字符个数,最大字符个数255,代表能存255个字符。不是字符大小限制在255个字符。

#中文超出个数被截断

"[email protected]:mysql6666.sock  [china]>insert into a11 select repeat(‘中‘,255);

Query OK, 1 row affected (0.00 sec)

Records: 1  Duplicates: 0  Warnings: 0

"[email protected]:mysql6666.sock  [china]>insert into a11 select repeat(‘中‘,256);

Query OK, 1 row affected, 1 warning (0.00 sec)

Records: 1  Duplicates: 0  Warnings: 1

"[email protected]:mysql6666.sock  [china]>show warnings;

+---------+------+-------------------------------------------+

| Level   | Code | Message                                   |

+---------+------+-------------------------------------------+

| Warning | 1265 | Data truncated for column ‘name‘ at row 1 |

+---------+------+-------

#英文超出个数被截断

"[email protected]:mysql6666.sock  [china]>insert into a11 select repeat(‘e‘,255);

Query OK, 1 row affected (0.00 sec)

Records: 1  Duplicates: 0  Warnings: 0

"[email protected]:mysql6666.sock  [china]>insert into a11 select repeat(‘e‘,256);

Query OK, 1 row affected, 1 warning (0.00 sec)

Records: 1  Duplicates: 0  Warnings: 1

"[email protected]:mysql6666.sock  [china]>show warnings;

+---------+------+-------------------------------------------+

| Level   | Code | Message                                   |

+---------+------+-------------------------------------------+

| Warning | 1265 | Data truncated for column ‘name‘ at row 1 |

+---------+------+-------------------------------------------+

1 row in set (0.00 sec)

汉字占3个字节的大小,英文占一个字节大小

"[email protected]:mysql6666.sock  [china]>select length(name) from a11;

+--------------+

| length(name) |

+--------------+

|          255 |

|          255 |

|          255 |

|            3 |

|            1 |

|          255 |

|          258 |

|          765 |我

|          765 |

|          255 |e

|          255 |

+--------------+

时间: 2024-10-22 00:13:45

varchar(N)和char(N)中的N解析的相关文章

char数组中除去某个元素

1 /* 2 本程序说明: 3 4 char数组中除去某个元素(其实就是strcpy源码的变形) 5 6 */ 7 #include <iostream> 8 #include <cassert> 9 #include <cstring> 10 using namespace std; 11 12 char * remove_char(char* src, int length, char c){ 13 char *dst=src; 14 char *res=dst;

关于将16进制的数据存放在char数组中的问题的解决方案

首先说明一点,题目提到的问题我目前并没有解决,我在此处发表随笔就是希望看到的同学们有会的帮我解决一下. 现在来说一下我的需求: 1.定义一个数组:unsigned char cmd[6] = {0xF0,0x11,0x01,0x65,0x87,0xA9}; 2.然后将这个数组的数据写入串口中,我在写的时候发现了cmd中的数据出现了乱码的现象,于是我采用下面一种方法: 3.使用sprintf函数,于是有了下面的代码: 1 char pBuf[9]; 2 sprintf(pBuf,"%x %x %x

面试题4 将一个char数组中的所有空格替换成%20

题目: 将一个字符串 (char数组) 中的所有空格都替换成 "%20". 这里假设数组中是有足够的空余空间的  所以不需要扩展数组 解题思路就是 首先判断数组中到底有多少个空格 这样就可以知道 新的数组有多长 然后反着遍历数组 从最后一个开始  将字符串中的最后一个字符  移动到新的最后一个位置  然后是倒数第二个  一旦遇到空格就将 '0', '2', '%' 三个字符分别插入新的位置 以此类推 代码如下 public void mySolution(char[] str){ in

查询数据库语句报错“数据类型 text 和 varchar 在 equal to 运算符中不兼容。&quot;

问题:查询数据库语句报错"数据类型 text 和 varchar 在 equal to 运算符中不兼容." 解决: select * from 表名称 where cast(查询的字段名称 as varchar(max)) ='查询的值'

System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

一.引起的源头 环境:vs2015,sqlserver2008 相关程序包:ef6 定义了一个实体article public class Article { public string Data{get;set;} } EntityTypeConfiguration的配置 Property(a => a.Data).IsRequired().HasColumnType("text"); 这样可以正常生成表字段,而且类型也正确插入数据的时候,就引起了以下异常 System.Dat

HTTP1.1中CHUNKED编码解析(转载)

HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC  1945  10.4章节中.浏览器接收到此头信息后,接受完Content-Length中定义的长度字节后开始解析页面,但如果服务端有部分数据延迟发送吗,则会出现浏览器白屏,造成比较糟糕的用户体验. 解决方案是在HTTP1.1协议中,RFC  2616中14.41章节中定义的Transfer-E

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

【转】STL算法 &lt;algorithm&gt;中各种算法解析

原文:http://blog.csdn.net/tianshuai1111/article/details/7674327 一,巡防算法 for_each(容器起始地址,容器结束地址,要执行的方法) #include <iostream> #include <algorithm> #include <vector> using namespace std; template<class T> struct plus2 { void operator()(T&

转:在java中使用dom4j解析xml

在java中使用dom4j解析xml 虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: <?xml version="1.0" encod