MySQL列中类型为varchar是什么类型怎么在java中插入string类型数据

如果你每次建数据表的时候固执的使用varchar,那么你可能会遇到以下的问题:
现在saleUserName的字段类型为varchar(50)
update TableNameset saleUserName='小覃祝你⑭快乐' where ID=87
select * from TableName where ID=87
why?SaleUserName字段里的文字怎么变成这样了。⑭这个符号怎么变成了?
好的,那么我现在将saleUserName的字段类型改为nvarchar(50)呢
updateTableNameset saleUserName='小覃祝你⑭快乐' where ID=87
select * from TableName where ID=87
What!?怎么还是一样!
那么,稍微改一下,在参数值前面加上N。现在可以看到调皮的⑭出来了。
updateTableNameset saleUserName=N'小覃祝你⑭快乐' where ID=87
------加上N代表存入数据库时以Unicode格式存储。
----------------------------------------------------------总结的时候,我总是得召唤出这么华丽的分割线-----------------------------------------------------------------
unicode,以前学习的时候看过,根本没留心。那么好,百度一下,百度百科是这么说的:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
nvarchar和ntext就是可以容纳unicode的类型,所以才能存储调皮的⑭等特殊字符。
以前根本没留意过这些数据类型,看到说是存unicode类型的,可是根本不知道unicode为何物。码农就是这么任性,不够重视这些东西。mysql5.1中varchar字段多长才能自动存储为text类型? - MySQL及其它开源数据库 - ITPUB论坛-中国专业的IT技术社区
后使用快捷导航没有帐号?
查看: 4390|回复: 9
mysql5.1中varchar字段多长才能自动存储为text类型?
论坛徽章:2
mysql5.1中varchar字段多长才能自动存储为text类型?
论坛徽章:2
这里的字段长度是指定义的varchar长度到了一定范围,转成text类型。还是指实际存放的字段内容到了一定长度,才能转成text类型。
论坛徽章:10
和你定义的字符集有关,如果按latin1算最大能够成功的是65532,因为65533再加上2个表示长度的字节就会溢出报错,65536就会转化为text
如果utf8更少因为utf81个算3个byte
论坛徽章:25
会自动转换吗?
论坛徽章:25
应该不会吧.
假如在一个表中定义了好几个varchar(8000)字符,就会报错...
论坛徽章:3
本帖最后由 jiwang1980 于
09:28 编辑
lanbaibai 发表于
这里的字段长度是指定义的varchar长度到了一定范围,转成text类型。还是指实际存放的字段内容到了一定长度, ...
定义列的时候会转,如果只有一个列为varchar
试了 5.5 直接转MEDIUMTEXT
论坛徽章:4
65532& & 如果超过 会自动转成text
论坛徽章:25
本帖最后由 hwtong 于
08:18 编辑
Server version: 5.1.60-community MySQL Community Server (GPL)
Copyright (c) , Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Type '' or '\h' for help. Type '\c' to clear the current input statement.
mysql& use wison
Database changed
mysql& create table tatesta(name varchar(7000),
& & -& name2 varchar(7000),
& & -& name3 varchar(7000),
& & -& name4 varchar(1000)
ERROR ): Row size too large. The maximum row size for the used table
type, not counting BLOBs, is 65535. You have to change some columns to TEXT or B
mysql& create table testad(name varchar(65000));
ERROR ): Column length too big for column 'name' (max = 21845); use B
LOB or TEXT instead
论坛徽章:52
hwtong 发表于
Server version: 5.1.60-community MySQL Community Server (GPL)
Copyright (c) , Oracle an ...
这个跟存储引擎也有关系的,若是InnoDB引擎有8K页的限制,为此测试的时候可以考虑用一张表只有一个VARCHAR类型字段测试,定义的时候写2W多一点 也即65535/3 (注释:utf8编码)则自动修改定义语句为TEXT类型
论坛徽章:2
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号【MySQL基础】String类型&CHAR和VARCHAR类型等
【MySQL基础】String类型
CHAR和VARCHAR类型等
一下主要参考MySQL手册 最近要好好读。
主要讨论以下主题:
·&&&&&&&&&CHAR
和 VARCHAR介绍以及工作?
·&&&&&&&&&CHAR
和 VARCHAR 区别
·&&&&&&&&&CHAR(4)
和 VARCAHR(4)区别
·&&&&&&&&&了解TEXT
·&&&&&&&&&了解ENUM
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
1.&String类型
1.1.&CHAR和VARCHAR类型
CHAR&tʃɑː&VARCHAR&vɑ:(r)
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:
VARCHAR(4)
'abcdefgh'
请注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。
从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。具体例子可以参考mysql手册。
1.2.&BLOB和TEXT类型
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
BLOB&列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的
校对规则对值进行排序和比较。
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。
在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列。BLOB和TEXT在以下几个方面不同于VARBINARY和VARCHAR:
·&&&&&&&&&当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
请注意比较时将用空格对TEXT进行扩充以适合比较的对象,正如CHAR和VARCHAR。
·&&&&&&&&&对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
·&&&&&&&&&BLOB和TEXT列不能有
1.3.&ENUM类型
ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。
在某些情况下,ENUM值也可以为空字符串('')或NULL:
·&&&&&&&&&如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。后面有详细讨论。
·&&&&&&&&&如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且
默认值为NULL。如果ENUM列被声明为NOT
NULL,其默认值为允许的值列的第1个元素。
每个枚举值有一个索引:
·&&&&&&&&&来自列规定的允许的值列中的值从1开始编号。
·&&&&&&&&&空字符串错误值的索引值是0。这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行:
·&&&&&&&&&&&&&&&&mysql&&SELECT * FROM&tbl_name&WHERE&enum_col=0;
·&&&&&&&&&NULL值的索引是NULL。
例如,定义为ENUM的列('one','two','three')可以有下面所示任何值。还显示了每个值的索引:
枚举最多可以有65,535个元素。
当创建表时,ENUM成员值的尾部空格将自动被删除。
当检索时,保存在ENUM列的值使用列定义中所使用的大小写来显示。请注意可以为ENUM列分配字符集和
校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。
如果在数值上下文中检索一个ENUM值,将返回列值的索引。例如,你可以这样从ENUM列搜索数值值:
mysql&&SELECT&enum_col+0 FROM&tbl_name;
如果将一个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员。(但是,这不适合LOAD
DATA,它将所有输入视为字符串)。不建议使用类似数字的枚举值来定义一个ENUM列,因为这很容易引起混淆。例如,下面的列含有字符串值'0'、'1'和'2'的枚举成员,但数值索引值为1、2和3:
numbers ENUM('0','1','2')
根据枚举成员在列定义中列出的顺序对ENUM值进行排序。(换句话说,ENUM值根据索引编号进行排序)。例如,对于ENUM('a','b'),'a'排在'b'前面,但对于ENUM('b','a'),'b'排在'a'前面。空字符串排在非空字符串前面,并且NULL值排在所有其它枚举值前面。要想防止意想不到的结果,按字母顺序规定ENUM列。还可以使用GROUP
BY&&CAST(col AS
CHAR)或GROUP
BY&&CONCAT(col)来确保按照词汇对列进行排序而不是用索引数字。
如果你想要确定一个ENUM列的所有可能的值,使用SHOW
COLUMNS FROM&tbl_name&LIKE&enum_col,并解析输出中第2列的ENUM定义。
原文出自:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。mysql里varchar类型主键怎么实现自增【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:725,178贴子:
mysql里varchar类型主键怎么实现自增收藏
KHKHmysql里这种varchar主键怎么自增,求大神解答
真是服了,连个大牛都没有吗?都是来打酱油的吗?
varchar类型的数据库本身无法实现自增 ,只能用java语句来控制然后插入数据库
程序里面拼接咯。。varchar没法自增。。。
如果是一个大型的项目,把最后一个数据删了,然后再加一个,是不是主键要重复了?
好吧!已经解决,谢谢
登录百度帐号【mysql 长类型转字符串】 - CSDN

我要回帖

更多关于 varchar是什么类型 的文章

 

随机推荐