<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} --> <!-- [endif]-->
MySQL5 中varchar 字段最大长度
很早就了解MySQL5 中的varchar 字段可以大于255 个字节,仔细读了一下MySQL5 的文档,其中对varchar 字段类型描述:varchar(m) 变长字符串。M 表示最大列长度。M 的范围是0 到65,535 。(VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,最大有效 长度是65,532 字节)。
MySQL 5.1 遵从标准SQL 规范,并且不删除VARCHAR 值的尾部空格。VARCHAR 保存时用一个字节或两个字节长的前缀+ 数据。如果VARCHAR 列声明的长度大于255 ,长度前缀是两个字节。
注:测试了一下使用UTF8 编码,varchar 的最大长度为21854 字节。
mysql 中 varchar 字段长度超过限制长度自动截取的问题
mysql 手册的说明:
如果分配给CHAR 或VARCHAR 列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误( 而不是警告) 并通过使用严格SQL 模式禁用值的插入。
MySQL 服务器模式说明:
MySQL 服务器可以以不同的SQL 模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。
模式定义MySQL 应支持哪些SQL 语法,以及应执行哪种数据验证检查。这样可以更容易地在不同的环境中使用MySQL ,并结合其它数据库服务器使用MySQL 。
你可以用--sql-mode="modes " 选项启动mysqld 来 设置默认SQL 模式。如果你想要重设,该值还可以为空(--sql-mode ="") 。
你还可以在启动后用SET [SESSION|GLOBAL] sql_mode='modes ' 语句设置sql_mode 变量来更改SQL 模式。设置 GLOBAL 变量时需要拥有SUPER 权限,并且会影响从那时起连接的所有客户端的操作。设置SESSION 变量只影响当前的客户端。任何客户端可以随时更改自己的会话 sql_mode 值。
Modes is 是用逗号(‘ ,’) 间隔开的一系列不同的模式。你可以用SELECT @@sql_mode 语句查询当前的模式。默认值是空( 没有设置任何模式) 。
主要重要sql_mode 值为:
· ANSI
更改语法和行为,使其更符合标准SQL 。
· STRICT_TRANS_TABLES
如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1 行,则放弃该语句。本节后面给出了更详细的描述。
· TRADITIONAL
Make MySQL 的行为象“ 传统”SQL 数据库系统。该模式的简单描述是当在列中插入不正确的值时“ 给出错误而不是警告” 。注 释:一旦发现错误立即放弃INSERT/UPDATE 。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“ 滚动” ,结果是更新“ 只进行了一部分” 。
本手册指“ 严格模式” ,表示至少STRICT _TRANS_TABLES 或STRICT _ALL_TABLES 被启用的模式。
本文详细介绍了MySQL 5.x版本中VARCHAR字段类型的特性及其限制,包括最大长度、数据存储方式及如何处理超出长度限制的情况。此外,还探讨了MySQL服务器的不同SQL模式下VARCHAR字段的行为差异。
278

被折叠的 条评论
为什么被折叠?



