varchar与char的转换_character with byte sequence

varchar与char的转换_character with byte sequence储存不区分大小写的字符数据TINYTEXT最大长度是255(2^8–1)个字符。TEXT最大长度是65535(2^16–1)个字符。MEDIUMTEXT最大长度是16777215(2^24–1)个字符。LONGTEXT最大长度是4294967295(2^32–1)个字符Varchar对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

储存不区分大小写的字符数据

TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。

TEXT 最大长度是 65535 (2^16 – 1) 个字符。

MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。

LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符

Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节

char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节

Varchar 的类型不以空格填满,比如varchar(100),但它的值只是”n”,则它的值就是”n”

而char 不一样,比如char(100),它的值是”n”,而实际上它在数据库中是”n “(n后共有99个空格,就是把它填满为100个字节)。

由于 char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

他们的存储方式和数据的检索方式都不一样。

数据的检索效率是:char>varchar>text

空间占用方面,要具体情况具体分析了。

M个字节,0 <=M<= 255

L+1个字节,其中L<=M且0 <=M<= 65535

L+2个字节,其中L< 216

Char为定长,varchar,text为变长

Char在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。(与sql server可能有些不同)

Varchar在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留。

TEXT列不能有默认值,存储或检索过程中,不存在大小写转换.

当存储的字符超过他们定义的长度时候,如果不是在sql服务器的严格模式下,都会自动截取合适的字段存储,而不会出现错误。但是,如果是中文的话同样要报错误:)比如定义char(4),然后insert (‘c哈哈’).

注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值

text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试 :))

存储计算:

在使用UTF8字符集的时候,手册上是这样描叙的:

·        基本拉丁字母、数字和标点符号使用一个字节。

·        大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言。

·        韩语、中文和日本象形文字使用三个字节序列。

char会造成空间浪费,但是有速度优势;而varchar节省了空间,但是速度就不如char。

经常变化的字段用varchar

知道固定长度的用char

尽量用varchar

超过255字节的只能用varchar或者text

能用varchar的地方不用text

建表时IP字段设成了varchar,但是由于要对其建索引,以达到与其它表结合查询时提高效率的目的,打算将它改成char,修改后竟然没有成功。

最后发现原来要改就必须把该表中的所有varchar和text的字段一次性都改为char:

alter table ip_table modify ipddress char(16) default ”,modify status char(10) default ”,modify memo char(255) default ”;

又试了下,如果原表中都是char,只要把其中一个字段改为varchar或者text,则其它所有char字段自动改为varchar

……

alter table ip_table modify memo text;

之后表中的情况:

ipddress varchar(16)

status varchar(10)

memo text

mysql也太扯了……

在同一个表中不能混用CHAR 和VA R C H A R。MySQL 根据情况甚至会将列从一种类型转换为另一种类型。这样做的原因如下:

■ 行定长的表比行可变长的表容易处理(其理由请参阅2 . 3节“选择列的类型”)。

■ 表行只在表中所有行为定长类型时是定长的。即使表中只有一列是可变长的,该表的

行也是可变长的。

■ 因为在行可变长时定长行的性能优点完全失去。所以为了节省存储空间,在这种情况

下最好也将定长列转换为可变长列。

这表示,如果表中有VARCHAR 列,那么表中不可能同时有CHAR 列;MySQL 会自动

地将它们转换为VARCHAR 列。例如创建如下一个表:

CREATE TABLE my_table

(

c1 CHAR(10),

c2 VARCHAR(10)

)

如果使用DESCRIBE my_table 查询,则其输出如下:

Feild Type Null Key Default Extra

c1 varchar(10) yes null

c2 varchar(10) yes null

请注意,VARCHAR 列的出现使MySQL 将c1 也转换成了VARCHAR 类型。如果试图用

A LTER TABLE 将c1 转换为C H A R,将不起作用。将VARCHAR 列转换为CHAR 的惟一办

法是同时转换表中所有VARCHAR 列:

ALTER TABLE my_table MODIFY c1 CHAR(10),MODIFY c2 CHAR(10)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170348.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]

    java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]importjava.io.File;importjava.util.Date;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.Address;importjavax.mail.BodyPart;importjavax.mail.Message;impo…

    2022年5月14日
    34
  • wxPython的基础教程

    wxPython的基础教程写在前面的话:上个假期学习了Python,发现它真的是一门很有趣的语言,所以这学期想学一些python的可视化编程,于是选择了wxPython。但是我在网上找中文教程找了好久都没有找到中文的教程(额,也许是我方法不对),无奈只好看英文的啦。于是在这个网站上看完了wxPython的基础教程,但是为了方便广大网友所以决定将这个网页中的内容翻译过来。花费了3个晚上的时间,终于把它翻译完了。但是我只是一个

    2022年5月21日
    28
  • 手把手教你如何将图片“嵌入”网页中

    手把手教你如何将图片“嵌入”网页中将图片“嵌入”网页中

    2022年5月27日
    81
  • 学c++还是学java就业「建议收藏」

    学c++还是学java就业「建议收藏」Java更偏向业务型开发,比如银行的xx管理系统,安卓手机的软件以及WEB等等。java更容易入手,学会用框架基本就能来开发,开发效率(完成的速度)相对高,当前相对C++更好就业,薪资平均水平相比C++略高(参考2014年谷歌统计数据)。C++,难度相对高,入手较难深入也难,它涉及的内容很多,特性很多,可以做一些考虑性能(并发,速度)的东西,比如各种后台服务,游戏的后台部分,C++主要更服务器打交道,当然你要用上MFC,QT等也能做界面的东西。前途还是钱途:当前的话,可能Java性价比更高。不过游戏,

    2022年7月17日
    14
  • k8s pod的状态为evicted

    k8s pod的状态为evictedkubectlgetpods–namespace=ingress-nginx–watch

    2022年5月16日
    38
  • OpenCV—python 边缘检测(Canny)「建议收藏」

    OpenCV—python 边缘检测(Canny)「建议收藏」一、OpenCV-Python中Canny()参数&quot;&quot;&quot;cv2.Canny(image,#输入原图(必须为单通道图)threshold1,threshold2,#较大的阈值2用于检测图像中明显的边缘[,edges[,apertureSize[,#…

    2022年5月29日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号