Varchar 字符集=utf8 与 nvarchar
Varchar charset=utf8 vs nvarchar
我遇到过很多 nvarchar
与 varchar
的比较,它通常总是提到 unicode 与非 unicode 问题。但是,在 varchar
列使用 unicode charset/collation 的情况下,例如:
CREATE TABLE `t`
(
`title` varchar(200) DEFAULT NULL,
`studio` varchar(40) DEFAULT NULL,
`currency` varchar(3) DEFAULT NULL,
) DEFAULT CHARSET=utf8;
nvarchar
和varchar
是同一个意思,还是有区别? Mysql 或 Postgres 没有这种类型,所以我假设当 varchar
是 unicode?
时它们会变成相同的东西
既然你标记了“甲骨文”,我就可以给出一个声明。
在 Oracle 中,您有两个字符集,字符集(用于 VARCHAR2
等)和国家字符集(用于 NVARCHAR2
等)
它们的存在主要是由于历史原因。在早期,字符集(例如 US7ASCII
)用于通用数据,例如 PL/SQL 代码或元数据,而国家字符集(例如 WE8ISO8859P1
用于西欧)用于语言特定数据.
现在默认的字符集是AL32UTF8
,即涵盖整个Unicode的UTF-8。实际上,我认为今天没有理由使用国家字符集。越来越多的新原生 Oracle 函数不支持 NVARCHAR2 数据类型,所以今天你真的应该避免数据类型 NVARCHAR2
、NCLOB
等
我遇到过很多 nvarchar
与 varchar
的比较,它通常总是提到 unicode 与非 unicode 问题。但是,在 varchar
列使用 unicode charset/collation 的情况下,例如:
CREATE TABLE `t`
(
`title` varchar(200) DEFAULT NULL,
`studio` varchar(40) DEFAULT NULL,
`currency` varchar(3) DEFAULT NULL,
) DEFAULT CHARSET=utf8;
nvarchar
和varchar
是同一个意思,还是有区别? Mysql 或 Postgres 没有这种类型,所以我假设当 varchar
是 unicode?
既然你标记了“甲骨文”,我就可以给出一个声明。
在 Oracle 中,您有两个字符集,字符集(用于 VARCHAR2
等)和国家字符集(用于 NVARCHAR2
等)
它们的存在主要是由于历史原因。在早期,字符集(例如 US7ASCII
)用于通用数据,例如 PL/SQL 代码或元数据,而国家字符集(例如 WE8ISO8859P1
用于西欧)用于语言特定数据.
现在默认的字符集是AL32UTF8
,即涵盖整个Unicode的UTF-8。实际上,我认为今天没有理由使用国家字符集。越来越多的新原生 Oracle 函数不支持 NVARCHAR2 数据类型,所以今天你真的应该避免数据类型 NVARCHAR2
、NCLOB
等