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 被启用的模式。