MySQL5中varchar 问题


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

 

 

 

 

 

你可能感兴趣的:(数据库)