`
ihuashao
  • 浏览: 4546749 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MySQL5中varchar 问题

阅读更多

<!-- [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]-->


MySQL5varchar 字段最大长度

很早就了解MySQL5 中的varchar 字段可以大于255 个字节,仔细读了一下MySQL5 的文档,其中对varchar 字段类型描述:varchar(m) 变长字符串。M 表示最大列长度。M 的范围是065,535 (VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,最大有效 长度是65,532 字节)。

MySQL 5.1 遵从标准SQL 规范,并且不删除VARCHAR 值的尾部空格。VARCHAR 保存时用一个字节或两个字节长的前缀+ 数据。如果VARCHAR 列声明的长度大于255 ,长度前缀是两个字节。

注:测试了一下使用UTF8 编码,varchar 的最大长度为21854 字节。


mysql varchar 字段长度超过限制长度自动截取的问题

mysql 手册的说明:

如果分配给CHARVARCHAR 列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误( 而不是警告) 并通过使用严格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_TABLESSTRICT _ALL_TABLES 被启用的模式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics