描述数据库字段时,varchar(N)中的N是指什么?是字符数还是字节数?另外,当使用UTF-8时,一个字符可能会使用多个字节。
这是字符的最大数量。
nvarchar(1000)
= 最多可以输入1000个Unicode字符。
varchar
无法存储Unicode字符,因此 varchar(n)
中的 n
指的是字符数和字节数。而在 nvarchar(n)
中,n
表示Unicode字符的数量,存储大小为 n
倍的两个字节。
如果您查询 information_schema.columns
,将会有两个特别关注的列:CHARACTER_MAXIMUM_LENGTH
和 CHARACTER_OCTET_LENGTH
。前者保存字符数,后者保存字节数。
它都不是!对于nchar / nvarchar,它是字节对的数量(因此使用代理字节对编码的字符使用两个字节对,在UTF-16中)。
自从这个问题被错误回答以来已经过去了很多年,问题中所做的断言,即varchar仅为单字节编码,也变得不正确。可以有UTF-8编码的varchar列,并且varchar(n)指定的是字节数,而不是字符数(UTF-8编码需要最多4个字节才能表示一个字符)。